SQL 小小问题

来源:百度知道 编辑:UC知道 时间:2024/06/08 07:33:52
create proc SaferDynamicSQL(@userName nvarchar(25))
as
declare @sql nvarchar(255)
set @sql = 'select * from users where UserName = @p_userName'
exec sp_executesql @sql,
N'@p_userName nvarchar(25)',
@p_userName = @userName
go
我不明白@p_userName这个变量,先使用、后定义,怎么回事?
而且这两句定义看不懂:
N'@p_userName nvarchar(25)',
@p_userName = @userName
谢谢了
N'是啥意思?

上面其实没有使用, 只是定义了一个字符串, 用作查询语句。
真正使用应该是在这个@sql 正式使用的时候, 例如:
exec @sql
这个时候才是用到了里面的变量。

N是Unicode转换, nvachar类型的字段如果要存储不同语言的字符,
就要用这个, 要不就会出现乱码。

只看这句
exec sp_executesql 'select * from users where UserName = @p_userName'
, N'@p_userName nvarchar(25)', @p_userName = @userName

sp_executesql 查后面的SQL句,里面有个变量@p_userName ,后面的@p_userName = @userName
是给他赋值

定义unicode的变量

变量前都必须加N

0