刚刚从书上看到的 写下来和大家分享一下
declare @iid int
declare @sql nvarchar(max)
set @sql='select top 1'+ @iid+'=ID from cte' --cte是表名,ID为字段名
exec(@sql)
select @sql
执行时报错:在将 varchar 值 'select top 1' 转换成数据类型 int 时失败。一定要注意变量的类型
declare @iid char(10)
declare @sql nvarchar(max)
set @sql='select top 1'+ @iid+'=ID from cte' --cte是表名,ID为字段名
exec(@sql)
select @sql
不报错 结果为null,但是这里是有错误的 因为:初始@iid为null,字符串相加的话结果仍然为null
所以使用exec拼接的时候变量一定要先赋值才可以!
而使用 sp_executesql 可以直接在语句中使用变量,再以返回值的形式输出:
declare @iid int
declare @sql nvarchar(1000) --数据类型必须为ntext/nchar/nvarchar
set @sql=N'select top 1 @iid =ID from cte' --必须加N
exec sp_executesql @sql,N'@iid int output',@iid output --必须加N
select @iid
这里在说明一下 在语句前面加上 N'表示语句 以unicode码存储
还有就是在拼接字符串的时候 ' 表示字符串边界,而 '' (双引号)表示 ' (单引号) ,所以想要真正显示 '(单引号) 需要 ''''(四个单引号)