SQLServer 執行字符串語句


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM