2011年1月31日 星期一

QUOTENAME的用途

今天同事問我一個dynamic sql的問題,因為dynamic sql要處理單引號,有時候相當的不方便,所以同事就問我有比較簡單的方法。
原來的dynamic sql如下:
DECLARE @SQLCMD VARCHAR(500)
DECLARE @CodeType VARCHAR(50)
SET @CodeType='FT'
SET @SQLCMD='SELECT * FROM ConfigCodes WHERE CodeType='''+@CodeType+''''
PRINT @SQLCMD
需要有'''作為單引號,有些不方便,看起來也相當不直覺。

於是我上msdn查了一下,發現有QUOTENAME這個function,使用QUOTENAME改寫一下:
DECLARE @SQLCMD VARCHAR(500)
DECLARE @CodeType VARCHAR(50)
SET @CodeType=QUOTENAME('FT','''')
SET @SQLCMD='SELECT * FROM ConfigCodes WHERE CodeType='+@CodeType
PRINT @SQLCMD
看起來相當的直覺,沒想到QUOTENAME除了加[]符號避免關鍵字被使用外,還有這種功能。

不過如果要用dynamic sql的話,我比較推薦sp_executesql,因為效能相對來說比較好。
sql如下:
EXECUTE sp_executesql N'SELECT * FROM  ConfigCodes
WHERE CodeType=@CodeType',N'@CodeType VARCHAR(50)',@CodeType=N'FT'

呼呼,真是意外的發現呢!

沒有留言:

張貼留言