A、標識符:是數據庫對象的名稱。
數據庫對象的名稱被看成是該對象的標識符。Microsoft? SQL Server? 中的每壹內容都可帶有標識符。服務器、數據庫和數據庫對象(例如表、視圖、列、索引、觸發器、過程、約束、規則等)都有標識符。大多數對象要求帶有標識符,但對有些對象(如約束)標識符是可選項。
B、保留關鍵字:是sql語言的語法。屬於代碼的範疇。
保留關鍵字是用來定義、操作和訪問數據庫。保留關鍵字是 SQL Server 使用的 Transact-SQL 語言語法的壹部分,用於分析和理解 Transact-SQL 語句和批處理。盡管在 Transact-SQL 腳本中,使用 SQL Server 保留關鍵字作為標識符和對象名在語法上是可行的,但規定只能使用分隔標識符。
C、字符串:數據類型的壹種,數據類型有整數型、字符串型等。屬於數據的範疇。
每個列、局部變量、表達式和參數都有壹個相關的數據類型。即屬於某種數據類型。
D、通配符、轉義符:這2個是跟字符串相關的概念。壹般出現在字符串中。
比如 like ’dsd%‘ , dsd% 是字符串。%是通配符。這個語句的含義大家應該都知道,^_^。
使用轉義符,可以把通配符改變成普通字符。2種方法:
1、[]是默認的轉義符,裏面的通配符(裏面只能是通配符),都當做普通字符處理:
like ’dsd[%]‘,這時,%就是個普通字符了,查找條件就是要某個字段值完全等於 dsd% 。
2、用ESCAPE關鍵字定義轉義符,
like ’dsd/%‘ ESCAPE ’/' 效果同 like ’dsd[%]‘
還有壹種轉義符情況:
大家知道,單引號壹般可用來包含字符串,如果字符串中有單引號是普通字符,那麽就同時有了2種意思的單引號,怎麽區分呢?就要用2個單引號來轉義為普通字符,如 like ‘ds''d’ ,其實就是指字符串:ds'd
後面提到的QUOTENAME函數,默認是用[]來做分隔符,如果字符串中有[],函數轉換後,字符串中的[]就要用兩個]]來轉義,表明這個[]是個普通字符,與字符串前後的分隔符 [] 相區別。
步入正題,
標識符,分為:
壹、常規標識符:符合常規標識符規則的標識符。
常規標識符規則如下:(參考sqlserver的聯機幫助)
1、。。。。。
2、。。。。。
3、。。。。。
4、。。。。。
二、分隔標識符:包含在雙引號 " 或者方括號 [ ] 內的標識符就是分隔標識符。
註意:雙引號 " 或者方括號 [ ] 是分隔符。
在 Transact-SQL 語句中,對不符合常規標識符規則的標識符必須用雙引號或方括號來分隔。符合標識符格式規則的標識符可以分隔,也可以不分隔。
1、當QUOTED_IDENTIFIER 為 ON 時,默認是on的。 SQL Server 遵循 SQL-92 規則:
雙引號只能用於分隔標識符,不能用於分隔字符串。
為保持與現有應用程序的兼容性,SQL Server 並不完全強制該規則。如果字符串沒有超過標識符的長度,則該字符串可包含在雙引號內。但不建議這樣做。
單引號必須用來包含字符串,不能用於分隔標識符。
如果字符串包含單引號,則需要在單引號前再增加壹個單引號:
SELECT * FROM "My Table"
WHERE "Last Name" = 'O''Brien'
註意:"Last Name",妳可以寫成'Last Name'而不會報語法錯誤,是因為,sql認為是進行字符串的比較了,比如寫成'Last Name'='Last Name',比較結果為真,表中的全部記錄就被select出來了。而如果寫成:WHERE "Last Name" = "O''Brien",即等號右邊改成雙引號,則會把O''Brien當成壹個標識符(數據庫對象),即當成壹個字段名,運行時,會提示沒有O''Brien列。 2、當 QUOTED_IDENTIFIER 為 OFF 時,對於雙引號和單引號的使用,SQL Server 遵循如下規則:
引號不能用於分隔標識符,而是用括號作為分隔符。
單引號或雙引號可用於包含字符串。
如果使用雙引號,嵌入的單引號不需要用兩個單引號來表示:
SELECT * FROM [My Table]
WHERE [Last Name] = "O'Brien"
常規標識符和分隔標識符包含的字符數必須在 1 到 128 之間
另外:
將標識符用作參數:(具體請參考聯機幫助)
許多系統存儲過程、函數和 DBCC 語句都把對象名當作參數。其中壹些參數接受多部分對象名,另壹些則只接受單部分名稱。接受單部分對象名稱還是多部分對象名稱決定了 SQL Server 在內部如何分析和使用參數。 。。。。。。。
另外:
QUOTENAME函數:
msdn解釋:返回帶有分隔符的 Unicode 字符串,分隔符的加入可使輸入的字符串成為有效的 Microsoft? SQL Server? 分隔標識符。
以下示例接受字符串 abc[]def 並使用 [ 和 ] 字符來創建有效的 SQL Server 分隔標識符:
SELECT QUOTENAME('abc[]def')
下面是結果集:
[abc[]]def]
(1 row(s) affected)
註意,字符串"abc[]def"中的右括號有兩個,用於表示轉義符,轉換成普通字符,與分隔符 [] 相區別。
解釋:字符串 abc[]def 中的[]是當做普通字符,所以用 ] ] 來表示 ] 是個普通字符,即表明中間的 [] 就是個普通字符。
如果是:SELECT QUOTENAME('abc[]def' , '()' ) ,不用[]來做分隔符,那麽結果是:
(abc[]def) ,就不用兩個]] 來轉義了,因為新的字符串中只有壹種意思的[],即普通字符。
這是個通用的規則,比如字符串中含有單引號 ' 為普通字符串時,比如 :ds'd ,
like 語句就要改成:like ‘ds‘’d’,而不是: like 'ds'd' 。即2個單引號表示轉義符,轉換成普通單引號字符 ' 。