SQL2005關於quotename的用法

2022-01-19 04:11:10 字數 3568 閱讀 3478

首先,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...