sql中EXEC和sp_execsql區別———————————&#

來源:互聯網
上載者:User

DECLARE @TableName VARCHAR(50),@sql NVARCHAR(MAX),@OrderID VARCHAR(50) ,@sql2 NVARCHAR(MAX);
SET @TableName = 'Orders ';
SET @OrderID = N'10251';
SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) + ' WHERE OrderID = '+CAST(@OrderID AS VARCHAR(50)) + ' ORDER BY ORDERID DESC'
EXEC sp_executesql @sql
go

DECLARE @TableName VARCHAR(50),@Sql NVARCHAR(MAX),@OrderID INT;SET @TableName = 'Orders';
SET @OrderID = 10251;
SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) +'WHERE OrderID = '+CAST(@OrderID AS VARCHAR(10))+' ORDER BY ORDERID DESC'
EXEC(@sql);
--註:這裡的EXEC括弧中只允許包含一個字串變數,但是可以串聯多個變數,如果我們這樣寫EXEC:

--EXEC('SELECT TOP('+ CAST(@TopCount AS VARCHAR(10)) +')* FROM '+QUOTENAME(@TableName) +' ORDER BY ORDERID DESC');
--SQL編譯器就會報錯,編譯不通過,而如果我們這樣:
EXEC(@sql+@sql2+@sql3)
go

DECLARE @TableName VARCHAR(50),@Sql NVARCHAR(MAX),@OrderID INT;SET @TableName = 'Orders';
SET @OrderID = 10251;
SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) +'WHERE OrderID = @OrderID ORDER BY ORDERID DESC'
EXEC(@sql);--必須在串聯的語句中生命變數@OrderId使用EXEC時,如果您想訪問變數,必須把變數內容串聯到動態構建的代碼字串中,如:SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) +'WHERE OrderID = '+CAST(@OrderID AS VARCHAR(10))+' ORDER BY ORDERID DESC'

--串聯變數的內容也存在效能方面的弊端。SQL Server為每一個的查詢字串建立新的執行計畫,即使查詢模式相同也是這樣。為示範這一點,先清空緩衝中的執行計畫

--DBCC FREEPROCCACHE (這個不是本文所涉及的內容,您可以查看MS的MSDN

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.