剛剛從書上看到的 寫下來和大家分享一下
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碼存儲
還有就是在拼接字符串的時候 ' 表示字符串邊界,而 '' (雙引號)表示 ' (單引號) ,所以想要真正顯示 '(單引號) 需要 ''''(四個單引號)