借助sp_executesql返回参数值两例

通常我们使用如下语句进行返回参数值:

declare @id int
Select top 1 @id=id from union_user

但是使用下边的语句是不是也可以呢?

declare @id int,@sql nvarchar(200)
set @sql = 'Select top 1 @id=id from union_user'
exec(@sql)

经检测这样写是不行的,提示:必须声明变量 '@id'。最终借助sp_executesql存储过程才实现:

declare @id int,@strSql nvarchar(200)
set @strSql = N' Select top 1 @id=id from union_user'
exec sp_executesql @strSql,N'@id int output',@id output

declare @id int,@strSql nvarchar(200)
set @strSql = N' Select top 1 id from union_user'
exec @id = sp_executesql @strSql

需要注意的是sp_executesql第一个参数@strSql必须是"ntext/nchar/nvarchar"类型,否则会出错提示:过程需要参数 '@statement' 为 'ntext/nchar/nvarchar' 类型。

还有一点值得注意的是@strSql的长度最好设置大一点,开始时我设置为50,发现老是得不到正确的结果,print @strSql才知道被截断了!

评论: 0 | 引用: 0 | 查看次数: 4654
发表评论
登录后再发表评论!