在一个存储过程里面,我们想更加灵活的执行SQL语句,而且提高效率的时候,在存储过程动态的执行SQL语句,如下所示:
代码如下所示:
declare @COT int
declare @tables varchar(50)
set @tables='SELECT @COTT=count(*) FROM Book'
exec sp_executesql @tables, '@COTT INT OUT',@COT out
print @COT
错误1: 过程需要类型为 'ntext/nchar/nvarchar' 的参数 '@statement'。
解决办法在声明的变量下面加N
declare @COT int
declare @tables nvarchar(50)
set @tables=N'SELECT @COTT=count(*) FROM Book'
exec sp_executesql @tables, N'@COTT INT OUT',@COT out
print @COT
这样就可以了
set @tables='SELECT @COTT=count(*) FROM Book'
exec sp_executesql @tables, '@COTT INT OUT',@COT out
不要不分就放在这两个语句下面
我们执行sp_executesql 的时候需要传入参数,也可以不需要传入参数。当我们需要传入参数的时候我们在exec sp_executesql 写传入参数的类型。OUT是传入禁区被复制,然后可以输出。同样这样只是定义了,后面还接一个参数,这个参数表示传入进去的值。这个值最后可以被输出print.