两种动态SQL
參考:
http://www.cnblogs.com/wanyuan8/archive/2011/11/09/2243483.html
http://www.cnblogs.com/xbf321/archive/2008/11/02/1325067.html
?
兩種動態SQL
1. EXEC (@sql)
2. EXEC sp_executesql
性能:
sp_executesql提供了輸入輸出接口,更具有優勢
sp_executesql根據參數重用執行計劃,不需要每一次都重新編譯,提高了執行性能; EXEC因為每次構建的@sql字符串不一樣,必須重新編譯
除非您有令人信服的理由使用EXEC,否側盡量使用sp_executesql
注意:(執行動態sql時候,防止sql注入攻擊)
1. 使用EXEC(@sql)時,如果您想訪問變量,必須把變量內容串聯到動態構建的代碼字符串中
?
2. sp_executesql后面跟有三部份,分別是 @stmt, @params, params_assignment
declare @sql nvarchar(200) declare @id varchar(20) declare @count int set @id='1' set @sql='select @count = count(1) from t_a where Rownum_id = @id' exec sp_executesql @sql, N'@count int out,@id varchar(20)',@count out,@id select @countsp_executesql使用:
sp_executesql要求動態Sql (即@stmt部分) 和動態Sql參數列表 (即@params部分) 必須是Nvarchar
N'@count int out,@id varchar(20)' 是@stmt內的參數列表; @count out,@id 是為@params參數列表提供值的外部參數列表
sp_executesql 參數列表@params與外部提供值的參數列表params_assignment的順序必需一致; 如果不一致,必須顯式標明,如 @id=@id, @count=@count out
動態SQl的參數列表與外部提供參數的參數列表參數名可以同名
轉載于:https://www.cnblogs.com/lynhou/p/6737830.html
總結
- 上一篇: 洛谷P1757 通天之分组背包 [201
- 下一篇: java RSA 加签验签【转】