名字:
- 關鍵字:詞法分析的一種作為常量的字串名,主要是為了詞法分析用。
- 標識符:詞法分析的一種作為變數的字串名,標識對象的名稱
- 保留字;詞法分析中不可作為標識符的字串名,主要是為了相容和擴充的目的。
通常,如果關鍵字可以通過雙引號("")引用而作為標識符,那它被稱為保留字;如果不需要雙引號引用就可以作為標識符使用,那它就不是保留字。
- sybase的標識符規則和sqlserver基本完全一樣:最大長度是128個字元,不區分大小寫,可以使用雙引號或方括弧括起來。標識符符合一般的規則時,不需要括起來:首字元是字母(字母表中的字母、底線、@、#、$),其他部分是字母、數字、_、@、#、$;但是絕對不能使用下列字元:雙引號、小於0x20的字元(控制字元)、雙反斜線;其他情況下,則必須使用方括弧或雙引號括起來:首字母不是字母,包含空格,為保留字,包含字母表以外的其他字元
- sqlbase的標識符規則和sqlserver不一樣的地方在於:sqlserver不允許$作為常規標識符的第一個字母;@@開頭的標識符代表全域變數;##開頭的標識符代表全域暫存資料表
常量:
- 字串常量:使用單引號或雙引號括起來的字元序列,推薦用單引號括起來;最大為2G個字元;具有位元組和字元兩種長度計量標準,對於單位元組字串字元長度等於位元組長度,對於多位元組字串字元長度小於位元組長度;
- Nchar字串常量:當然你可以使用“N'字串'”來指導nchar字串,如此對於通常的英文字串字元長度總等於位元組長度,而合字元集的無關。
- 二進位或十六進位字串常量:以“0x”開頭(不知道是否區分大小寫?待驗證?),偶數個[0-9a-f]字元組成的不帶引號的字串序列。
以上sybase和sqlserver是完全相同的!!
和sqlserver不同:sysbase支援4類的字串中的逸出序列:兩個當引號轉義為一個單引號字元;“\x”開頭後接十六進位數可以轉義任何字元;“\n”轉義分行符號;“\\”轉義一個反斜線字元。而sqlserver僅僅支援:兩個當引號轉義為一個單引號字元
運算子:
- 比較子:大小寫區分問題,尾隨空白處理問題
- 邏輯運算子:sqlserver支援的運算子比sybase多很多如:some、any、all、in、between、exists、like、in,但是不支援is;sysbase只支援:and 、or 、not、is
- 位元運算符:
- 字串串連運算子:sysbase除了支援 “+”外,還支援 sql2003標準的“||”;sqlserver不支援該操作符
基本上,可以認為sysbase的運算子是sqlserver運算子的子集
運算式:可以通過計算傳回值的語句。
sybase的運算式非常豐富,較sqlserver有很多的增強,可以是:
- sybase 運算式:常量、列名、函數、 變數、 一元運算、兩元運算、組合運算、僅僅返回一個標量值的子查詢、case運算式、if運算式、特殊值(類似於sqlserver的全域系統變數或系統函數)
- sqlserver運算式:常量、列名、純量涵式、本地變數、一元運算、兩元運算、組合運算、僅僅返回一個標量值的子查詢、case運算式、is [not] null運算式
搜尋條件:
- sybase中只能用於where、having、check、on短語、if運算式中的,類似於sqlserver的其他邏輯操作符和比較操作符,有:二元比較運算、{any|some|all}(多行子查詢) 、between、like ? escape ?、in、exists、not、and、or、is [NOT] {NULL|TRUE|FALSE|UNKNOWN}、顯示選擇性估計
- sybase基本上這些搜尋條件運算和sqlserver中相同;不同處:like 運算支援escape是sybase的特性;增強了is 測試的能力
特殊值:sysbase的特殊值和sqlserver的全域變數或會話變數或系統函數類似
變數:
- sysbase具有三個層級的變數:本地、串連會話、全域;而sqlserver有兩個層級的變數:本地、全域
- sysbase生命局部變數declare只能聲明1個;而sqlserver則可以declare聲明多個
- sysbase的變數可以通過set和select into設定;而sqlserver可以通過set 和 select = 設定
sybase很多的全域變數是為了相容t-sql而設定的,且很多特殊變數類似於全域變數,或者可以理解為全域變數的別名
注釋:
- sysbase支援四種注釋符風格:--、/* */ 、//、%(必須經過設定)
- sqlserver支援兩種注釋風格:--、/* */
null值問題: