存储过程中经常需要执行动态sql 语句,下面是一些常用的方法以及一些注意事项,欢迎补充。
数据库以master为例。
declare @name nvarchar(100)
declare @sql nvarchar(1000)
--比较简单的 直接执行
SET @sql ='SELECT * FROM spt_values'
print @sql
Exec(@sql)
--带参数的 需要注意的是单引号的转意操作。
SET @sql ='SELECT * FROM spt_values WHERE name =''rpc'''
print @sql
Exec(@sql)
--带动态参数的 引号一定写对了 比较恶心
SET @name ='rpc'
SET @sql ='SELECT * FROM spt_values WHERE name ='''+@name+''''
print @sql
EXEC (@sql)
--带返回参数的 可以通过下列方式接收
--需要注意的是带返回参数的@sql 变量一定是nvarchar 类型的。 varchar类型的会报错。
declare @count int
SET @sql ='SELECT @count = COUNT(*) FROM spt_values WHERE type =''A'''
--Exec (@sql)
print @sql
exec sp_executesql @sql,N'@count int output',@count output
print @count