由於變數(請參考:「如何在 T-SQL 中宣告變數」)只能用在運算式中,不能用來取代物件名稱或是關鍵字,所以如果要動態組出 SQL 陳述式,可以使用 EXECUTE 陳述式。
分享內容(
執行的部分結果畫面:

大家應該有注意到,在設定 @color 顏色變數時,在變數值的左右各用了 3 個單引號(')來把 Black 包起來,第 1 個單引號代表變數值的型別是 nvarchar 型別,第 2 與第 3 個單引號最後會被視為只有一個單引號。
另外,請務必在 EXECUTE 陳述式之後,用一對刮號把要執行的 T-SQL 給包起來,不然會發生如下圖的錯誤訊息:

如果想少打幾個字,可以將 EXECUTE 簡寫成 EXEC,就像下面這樣:
如果現在要再多加上一個查詢的限制條件,就是「產品編號」要小於 325:
執行結果:

在宣告 @pID 時,雖然「產品編號」的型別是 int(請參考下圖),但是由於 @SQLCommand 是宣告成 nvarchar,所以就不能把 @pID 宣告成 int,只能宣告成文字(char、nchar、varchar、nvarchar ... 這幾種)。而為了減少所需的記憶體空間,就決定使用 varchar 型別。
「產品編號」的型別是 int:
12人
SQL Server 擴充了 EXECUTE 陳述式的功能,讓我們可以把要執行的 T-SQL 傳給 SQL Server,最重要的是,所要執行的 T-SQL 的內容,可以透過動態的方式來設定。
假設我們要動態組出 T-SQL,從 AdventureWorks 資料庫中的 Production.Product 資料表內,找出「顏色」是黑色的產品,可以使用下面的程式碼:
USE AdventureWorks GO -- 宣告變數 DECLARE @SQLCommand nvarchar(200) DECLARE @columnList nvarchar(50) DECLARE @color varchar(10) -- 定義變數 SET @columnList = N'ProductID 產品編號, Color 顏色' SET @color = '''Black''' -- 動態組出 T-SQL SET @SQLCommand = 'SELECT ' + @columnList + ' FROM Production.Product WHERE Color = ' + @color -- 執行動態組出的 T-SQL EXECUTE (@SQLCommand)
執行的部分結果畫面:
大家應該有注意到,在設定 @color 顏色變數時,在變數值的左右各用了 3 個單引號(')來把 Black 包起來,第 1 個單引號代表變數值的型別是 nvarchar 型別,第 2 與第 3 個單引號最後會被視為只有一個單引號。
另外,請務必在 EXECUTE 陳述式之後,用一對刮號把要執行的 T-SQL 給包起來,不然會發生如下圖的錯誤訊息:
如果想少打幾個字,可以將 EXECUTE 簡寫成 EXEC,就像下面這樣:
EXEC (@SQLCommand)
如果現在要再多加上一個查詢的限制條件,就是「產品編號」要小於 325:
USE AdventureWorks GO -- 宣告變數 DECLARE @SQLCommand nvarchar(200) DECLARE @columnList nvarchar(50) DECLARE @color varchar(10) DECLARE @pID varchar(5) -- 定義變數 SET @columnList = N'ProductID 產品編號, Color 顏色' SET @color = '''Black''' SET @pID = '325' -- 動態組出 T-SQL SET @SQLCommand = 'SELECT ' + @columnList + ' FROM Production.Product WHERE Color = ' + @color + ' AND ProductID < ' + @pID -- 執行動態組出的 T-SQL EXEC (@SQLCommand)
執行結果:
在宣告 @pID 時,雖然「產品編號」的型別是 int(請參考下圖),但是由於 @SQLCommand 是宣告成 nvarchar,所以就不能把 @pID 宣告成 int,只能宣告成文字(char、nchar、varchar、nvarchar ... 這幾種)。而為了減少所需的記憶體空間,就決定使用 varchar 型別。
「產品編號」的型別是 int:
參考資料:Microsoft SQL Server 2005 線上叢書、實務經驗
▼ ADVERTISEMENT ▼
-
‧
-
‧
-
‧
相關問答
- 鐵人賽的疑問?
- 最後一天 -- 鐵人賽對我的意義!!!
- 第一屆iT邦幫忙鐵人賽早鳥獎與鐵人鍊成獎得獎名單
- 小財神來報告一下鐵人賽豐富的獎品與參賽報法囉
- 鐵人賽4
- MS SQL 2008
- 對於這次鐵人賽你認為哪些文章該被檢舉?
- 如何將 MS SQL 2000 上的資料完整的轉移或匯出到 MS SQL 2008?
- 鐵人賽發表的文章,可以同時發佈在自己個人部落格上嗎?
- 無法刪除SQL 2000的使用者
- 鐵人賽
- 將SQL 2000資料庫回存到SQL 2005出現錯訊
- 如何在 T-SQL 中宣告變數
- SQL Server 2008的趣味影片
- SQL 指令
- SQL Server備份發生錯誤
- 如何將SQL 2005 Express版本升級到標準版或企業版
- 請問有沒有類似SQL Naviagtor,TOAD的軟體?
- 鐵人賽5
- 鐵人賽6









