iThome online | iThome Blog | iThome周刊訂閱

載入中...

alexc

IT邦好手
9級

如何動態組出 T-SQL 指令(上)
標籤:鐵人賽 sql

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



收到書籤:發佈到twitter      
分享時間:2008-09-29 21:19:34

▼ ADVERTISEMENT ▼

分享內容(
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 線上叢書、實務經驗

如何動態組出 T-SQL 指令(上)
davidliu9116( IT邦初學者9級 )
2008-12-28 08:24:33
請問如何將結果回傳給函數呢?
1.資料表值函數應用中應如何建立?
2.純量值函數應用中又應如何建立?

回應

請填寫您的回應,長度限為1,000個字,回應不計點數,也不限使用次數



 

檢舉違規

違規事項:

*補充檢舉理由(可省略),字數不可超過100字

推薦

推薦理由:


*給回答者的鼓勵(可不填),字數不可超過100字

▼ ADVERTISEMENT ▼

熱門標籤

 cisco   crystal   exchange   it   java   javascript   linux   m-power   mail   microsoft   msnlib   msnp15   msnsdk   msn機器人   mysql   nas   oracle   outlook   pmi   pmp   raid   report   sap   server   smartquery   sql   vista   windows   xp   倍力   倍力資訊   免費軟體   國際專案管理師   報表   專案管理   微軟   有話大聲說   活動   省錢   網路   網路儲存   網路管理   網頁安全   網頁設計   資安   資料庫   資訊安全   防毒軟體   2003   2008