sqlerver動態拼接 exec&sp_executesql比較

剛剛從書上看到的  寫下來和大家分享一下

 

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碼存儲

還有就是在拼接字符串的時候 '  表示字符串邊界,而  ''  (雙引號)表示 '  (單引號) ,所以想要真正顯示 '(單引號)  需要 ''''(四個單引號)

發佈了34 篇原創文章 · 獲贊 16 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章