SqlServer中quotename用法與實例

語法 
QUOTENAME ( 'character_string' [ , 'quote_character' ] ) 
參數
'character_string'
Unicode 字符數據構成的字符串。character_string 是 sysname 值。
'quote_character'
用作分隔符的單字符字符串。可以是單引號 (')、左方括號或右方括號 ([ ]) 或者英文雙引號 (")。如果未指定

quote_character,則使用方括號。
實驗
quotename函數看分隔符默認是[ ] 
select quotename('df[]jls') 輸出結果:[df[]]jls]
select quotename('df[]jls',']') 輸出結果:[df[]]jls]
select quotename('df[]jls','') 輸出結果:[df[]]jls]
select quotename('df[]jls','''') 輸出結果:'df[]jls'
select quotename('df[]jls','}') 輸出結果:{df[]jls}
select quotename('df{}jls','}')  輸出結果:{df{}}jls}
請注意,字符串 df[]jls 中的右方括號有兩個,用於指示轉義符。
爲什麼輸出結果是:[df[]]jls]呢?
[df[]]jls]
分解成 
[]]中間的]是表示右邊的]是原樣輸出也就是說]]就表示] 
就跟''中的'要用''來表示一樣
就是說和]]轉義後得到 ] 和兩個單引號轉義成一個單引號是一個道理
實際用途
簡單來說吧
比如你有一個表,名字叫 index
你有一個動態查詢,參數是表名
declare @tbname varchar(256)
set @tbname='index'
---查這個表裏的數據:
print('select * from '+@tbname)
exec('select * from '+@tbname)
--這樣print出來的數據是
select * from index
因爲index是字鍵字,肯定出錯,加上括號就可以了:
select * from [index]
這便有了QUOTENAME,即:
print('select * from '+QUOTENAME(@tbname))
--結果:select * from [index]
exec('select * from '+QUOTENAME(@tbname))
或者說你的表名如果是abc 123話,直接查詢一定會出錯,而你由不得不把表名當做參數,這是你就可以使用quotename來進行轉義
總結
quotename的主要作用就是當列名,表名,存儲過程,等數據庫對象需要一參數的形式傳遞是,爲了確保參數的有效性你可以使用quotename來進行轉義,當然也可以在兩邊加上‘[]’,但是這樣寫很明顯會增加代碼的複雜性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章