官术网_书友最值得收藏!

3.2 SQL Server的命名規(guī)則

為了提供完善的數(shù)據(jù)庫管理機制,SQL Server 2016設計了嚴格的命名規(guī)則。用戶在創(chuàng)建或引用數(shù)據(jù)庫實體(如表、索引、約束等)時,必須遵守SQL Server 2016的命名規(guī)則,否則有可能發(fā)生一些難以預料和檢查的錯誤。本節(jié)將具體講解標識符的分類和格式、數(shù)據(jù)庫對象的命名規(guī)則與實例命名規(guī)則。

3.2.1 標識符

SQL Server 2016的所有對象,包括服務器、數(shù)據(jù)庫以及數(shù)據(jù)庫對象,如表、視圖、列、索引、觸發(fā)器、存儲過程、規(guī)則、默認值和約束等都可以有一個標識符。對絕大多數(shù)對象來說,標識符是必不可少的,但對某些對象(如約束)來說,是否規(guī)定標識符是可選的。對象的標識符一般在創(chuàng)建對象時定義,作為引用對象的工具使用。

例如下面的SQL語句:

    CREATE TABLE student
    (
    id int primary key,
    name varchar(20)
    )

這個例子創(chuàng)建了一個表格,表格的名字是一個標識符:student。表格中定義了兩列,列的名字分別是id和name,它們都是合法的標識符。此外,上述語句還自動定義了另一個未命名的主鍵約束。

1.標識符分類

具體來說,SQL Server 2016共定義了兩種類型的標識符:常規(guī)標識符(Regular Identifier)和分隔標識符(Delimited Identifier)。

(1)常規(guī)標識符:常規(guī)標識符嚴格遵守標識符有關格式的規(guī)定,在T-SQL語句中,凡是常規(guī)標識符都不必使用分隔符,如使用[]和‘ ’來進行分隔。例如,上述例子中使用的表名student就是一個常規(guī)標識符,在student上不必添加分隔符。

(2)分隔標識符:那些使用了分隔符號(如[]和‘ ’等)來進行位置限定的標識符。使用了分隔標識符,既可以遵守標識符命名規(guī)則,又可以不遵守標識符命名規(guī)則。需要注意的是,遵守了標識符命名規(guī)則的標識符,加分隔符與不加分隔符是等效的。例如,SELECT * FROM[student]語句從student表格中查詢出所有數(shù)據(jù),其功能與SELECT * FROM student語句等效。這是因為在“[]”中的標識符遵守標識符命名規(guī)則,“[]”被忽略不計。

如果是不遵守標識符命名規(guī)則的標識符,那么在T-SQL語句中就必須使用分隔符號加以限定,如:

    SELECT * FROM [my table]
    WHERE [order]=10

在這個例子中,必須使用分隔標識符,因為在FROM子句中的標識符my table中含有空格,而where子句中的標識符order是系統(tǒng)保留字。

這兩個標識符都不遵守標識符命名規(guī)則,必須使用分隔符,否則無法通過代碼編譯。

2.標識符格式

與程序設計語言類似,SQL Server 2016中的標識符必須符合一定的格式規(guī)定,其具體內(nèi)容如下:

(1)標識符必須是統(tǒng)一碼(Unicode)2.0標準中規(guī)定的字符,以及其他一些語言字符,如漢字等。

(2)標識符后的字符可以是“_”“@”“#”“$”及數(shù)字。

(3)標識符不允許是T-SQL的保留字。

(4)標識符內(nèi)不允許有空格和特殊字符。

需要注意的是,標識符最多可以容納128個字符。此外,某些以特殊符號開頭的標識符在SQL Server中具有特定的含義。例如,以“@”開頭的標識符表示這是一個局部變量或一個函數(shù)的參數(shù),以“#”開頭的標識符表示這是一個臨時表或一個存儲過程,以“##”開頭的標識符表示這是一個全局的臨時數(shù)據(jù)庫對象。在T-SQL中,全局變量以“@@”開頭。

3.2.2 對象命名規(guī)則

SQL Server 2016使用T-SQL語言,該語言中使用的數(shù)據(jù)對象包括表、視圖、存儲過程、觸發(fā)器等,這些對象的標識符也需符合如下命名規(guī)則。

(1)第一個字符必須是這些字符之一:字母a~z和A~Z、來自其他語言的字母字符、下劃線_、@或者數(shù)字符號#。

(2)后續(xù)字符可以是所有的字母、十進制數(shù)字、@符號、美元符號($)、數(shù)字符號或下劃線。

除非另外指定,否則所有對數(shù)據(jù)庫對象名的T-SQL引用可以是由4部分組成的名稱,格式如下:

    [
       server_name.[database_name].[owner_name].
       | database_name.[owner_name].
       | owner_name.
       ]
    ]
    object_name

具體的語法解釋如下:

● server_name指定鏈接服務器名稱或遠程服務器名稱。

● 當對象駐留在SQL Server 2016數(shù)據(jù)庫中時,database_name指定該SQL Server 2016數(shù)據(jù)庫的名稱;當對象在鏈接服務器中時,則指定OLE DB目錄。

● 如果對象在SQL Server 2016數(shù)據(jù)庫中,owner_name指定擁有該對象的用戶;當對象在鏈接服務器中時,則指定OLE DB架構名稱。

● object_name是引用對象的名稱。

引用對象名的格式如表3.1所示。

表3.1 引用對象名的格式

當引用某個特定對象時,不必總是為SQL Server指定標識該對象的服務器、數(shù)據(jù)庫和所有者??梢允÷灾虚g級節(jié)點,而使用句點表示這些位置。對象名的有效格式是:

    server.database.owner.object
    server.database..object
    server..owner.object
    server...object
    database.owner.object
    database..object
    owner.object
    對象

3.2.3 實例命名規(guī)則

所謂SQL實例,即SQL服務器引擎。每個SQL Server 2016數(shù)據(jù)庫引擎實例各有一套不為其他實例共享的系統(tǒng)及用戶數(shù)據(jù)庫,在一臺計算機上可以安裝多個SQL Server 2016,每個SQL Server 2016就可以理解為一個實例。

實例又分為“默認實例”和“命名實例”,如果在一臺計算機上安裝第一個SQL Server,命名設置保持默認,那么這個實例就是默認實例。在SQL Server 2016中,默認實例的名字采用計算機名,實例的名字一般由計算機名字和實例名字兩部分組成。為更好地理解實例,讀者可以從如下幾個方面著手:

(1)實例名稱是一個SQL Server服務的名稱,可以為空或者任何名稱(英文字符),實例名稱不能重復。

(2)如果安裝時一直提示寫實例名稱,說明已經(jīng)存在一個默認名稱的SQL Server實例,它使用了默認的空名稱。

(3)一個實例就是一個單獨的SQL Server服務。如果安裝了指定的SQL Server實例,可以在Windows服務列表中看到該實例的服務名稱。

(4)連接數(shù)據(jù)庫時,必須指明數(shù)據(jù)庫實例名稱。例如,使用默認配置安裝了一個SQL Server后,它的實例名稱為空。

(5)再次執(zhí)行SQL Server安裝程序,并不會提示已經(jīng)安裝了SQL Server,而是在設置實例名稱時,讓用戶指定一個新的實例名稱,才能進行下一步。

(6)卸載SQL Server時,可以選擇卸載一個SQL Server實例。

正確掌握數(shù)據(jù)庫的命名和引用方式是用好SQL Server的前提,也有助于用戶理解SQL Server中的其他內(nèi)容。

主站蜘蛛池模板: 会宁县| 郯城县| 温泉县| 溆浦县| 满城县| 和顺县| 平武县| 西藏| 霍州市| 张家港市| 碌曲县| 乌鲁木齐县| 高州市| 合江县| 瑞丽市| 屏东市| 达孜县| 南乐县| 崇义县| 新沂市| 河北省| 榕江县| 兴山县| 霍林郭勒市| 彰化市| 巴南区| 新安县| 陇川县| 阿拉善左旗| 西乡县| 闽清县| 彰化县| 阿拉善左旗| 恭城| 监利县| 都兰县| 左贡县| 偏关县| 自贡市| 库尔勒市| 旌德县|