首先,sqlserver裡的識別符號有一定的規則,比如 你
create table abc 123(...)
那麼中間含有空格,它不是符合規則的。
你會寫做 create table [abc 123](....)
即以來定界識別符號。
quotename將 字串成為有效的識別符號。
它有什麼用呢? 我舉個例子:
你有個表名字叫做 aabb
當某些應用動態語句查詢時 你如何寫呢
exec('select * from aabb') ?x
set @sql='select * from ' + quotename('aabb')
exec(@sql)
當然你也可以直接寫出轉義的寫法
select * from [aa]bb]
也就是說,quotename 使函式中的輸入成為乙個有效的識別符號。
比如上例中 aabb 不是乙個有效的識別符號。
還有一點就是quotename函式有幾種寫法:
quotename('aa') 生成的有效的識別符號為 [aa]
quotename('aa','') 生成的有效的識別符號為 [aa]
quotename('aa','''') 生成的有效的識別符號為 'aa'
解釋2:
簡單來說吧
比如你有乙個表,名字叫 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
))返回帶有分隔符的 unicode 字串,分隔符的加入可使輸入的字串成為有效的 microsoft sql server 2005 分隔識別符號。
transact-sql 語法約定
quotename ( 'character_string' [ , 'quote_character' ] )'character_string'
unicode 字元資料構成的字串。character_string 是 sysname 值。
'quote_character'
用作分隔符的單字元字串。可以是單引號 (')、左方括號或右方括號 ([ ]) 或者英文雙引號 (")。如果未指定 quote_character,則使用方括號。
nvarchar(258)
以下示例接受字串abcdef
並使用[
和]
字元來建立有效的 sql server 分隔識別符號。
select quotename('abcdef')下面是結果集:
[abc]def]請注意,字串(1 row(s) affected)
abcdef
中的右方括號有兩個,用於指示轉義符。
為什麼輸出結果是:[abc]def]呢?
[abc]def]
分解成
]中間的]是表示右邊的]是原樣輸出也就是說]]就表示]
就跟''中的'要用''來表示一樣
就是說和]]轉義後得到--> ] 和兩個單引號轉義成乙個單引號是乙個道理
quotename函式看分隔符是什麼因為預設是[ ] ,如果用的是}作分界符,那麼 select quotename('abcdef')
就不會發生轉義了.
select
quotename('
abc''
def'
,''''
) --分隔符是兩個單引號
--'abc''def'
select
quotename('
abc]def
') --分隔符是]
--[abc]]def]
select
quotename('
abc}def',
'{}') --分隔符是}
--}def}
示例:create
table
tab([i[
]]d]
int);
goselect
name
from
sys.columns
where
object_id
=object_id('
tab'
);/*
id */
也就是說:select quotename('abcdef') ,quotename函式預設分隔符是[ ]
所以在給quotename('abcdef')需要對abc後的進行轉義,如果quotename('abcdef','裡面使用{}那麼必須對}進行轉義:}}
那麼結果為:}def}
示例:select
quotename('
abcdef')
--預設是分隔符:[ ]
--[abc]def]
select
quotename('
abc{}def',
'}')
--}def}
quotename()函式
這個函式和sql server物件名組合使用,以將結果傳遞給表示式。它只用於給輸入的字串加一對方括號,並返回新形成的字串。如果引數包含保留的分隔符或者封裝字元(比如引號或括號),這個函式將修改字串,以便sql server能將結果字串中的這類字元當成文字字元。如下面的例子所示,查詢的結果如圖
--結論
/*初步理解為解決有些物件是sqlserver關鍵字的情況,即用該函式規範物件名,以便程式順利執行
*/
SQL2005關於quotename的用法
首先,sqlserver裡的識別符號有一定的規則,比如 你 create table abc 123 那麼中間含有空格,它不是符合規則的。你會寫做 create table abc 123 即以來定界識別符號。quotename將 字串成為有效的識別符號。它有什麼用呢?我舉個例子 你有個表名字叫做 ...
SQL2005乾淨解除安裝
昨天解除安裝安裝sql2005,安裝顯示成功之後可是就是沒有進入sql的檔案,只有配置工具,於是就解除安裝了,這下可好,解除安裝沒卸乾淨,又重新安裝,這次不僅顯示上一次已經安裝的檔案已經安裝安裝完成,還顯示只有配置工具,反覆弄了好幾次還是不成功,今天起來又開始我的安裝歷程,我先決定把該解除安裝的解除...
SQL2005 索引設計
1 評估索引本身的占用空間,當索引相對於其資料本身過大可能會無明顯作用。這種情況體現在 表很小,索引列過多,索引碎片過多。當索引在select中不起作用時,你還必須在insert和update delete這些操作中去維護這些不起作用的資料。2 in語句不一定不能使用索引,where id in 1...