1.使用execute來執行字符串
--使用Northwind數據庫 declare @sql nvarchar(200) set @sql='select * from customers' exec(@sql)
注意:
exec sql和exec(sql)是有區別的.
exec sql是執行存儲過程.
exec(sql)是執行sql字符串語句.
2.使用exec sp_executesql來執行字符串
--使用Northwind數據庫 declare @sql nvarchar(200) set @sql='select * from customers' exec sp_executesql @sql
傳遞參數:
--使用SQLServer數據庫 --聲明SQL字符串變量 declare @sql nvarchar(max) = ''; --1、執行SQL字符串 形參和實參一一對應 declare @contacttitle nvarchar(30) = 'owner'; set @sql='select * from customers where contacttitle=@contacttitle and CompanyName=@CompanyName'; exec sp_executesql @sql,N'@contacttitle nvarchar(30),@CompanyName nvarchar(40)',@contacttitle=@contacttitle,@CompanyName='Bon app'; --2、執行SQL字符串 形參和實參以先后順序對齊 declare @id nvarchar(50) = '',@name nvarchar(50) = ''; set @sql = 'SELECT TOP 1 @id = id FROM peoples WHERE name = @name'; exec sp_executesql @sql,N'@id nvarchar(50) OUTPUT,@name nvarchar(50)',@id OUTPUT,@name IN print '得到 id :' + @id;
現在來看exec sp_executesql的語法:
sp_executesql [@stmt =] stmt [ {, [@params =] N'@parameter_name data_type [,...n]' } {, [@param1 =] 'value1' [,...n] } ]
我們注意到該存儲過程的第一個參數是用來設置參數類型的,后面相應的才跟着參數的值.
替換 sp_executesql 中的參數的能力,與使用 EXECUTE 語句執行字符串相比,有下列優點:
1.因為在 sp_executesql 中,Transact-SQL 語句的實際文本在兩次執行之間未改變,所以查詢優化器應該能將第二次執行中的 Transact-SQL 語句與第一次執行時生成的執行計划匹配。這樣,SQL Server 不必編譯第二條語句。
2.Transact-SQL 字符串只生成一次。
3.整型參數按其本身格式指定。不需要轉換為 Unicode。
轉載自:https://www.cnblogs.com/oneword/archive/2010/03/12/1683937.html