T-SQL 語法元素

1、標識符sql

  在T-SQL語言中,對SQLServer數據庫及其數據對象(好比表、索引、視圖、存儲過程、觸發器等)須要以名稱來進行命名並加以區分,這些名稱就稱爲標識符。數據庫

  一般狀況下,SQLServer數據庫、數據庫以及各類數據對象都應該有一個標識符,但對於某些對象來講,好比約束,標識符是可選的。推薦每一個對象都使用標識符。express

一、常規標識符的規則ide

(1)、首字符:標識符的第一個字符必須知足下列條件:函數

    Unicode標準3.2定義的字母,一般就是字母a~z和A~Z。性能

    下劃線(_)、at字符(@)、或數字符號(#)。spa

(2)、後續字符:設計

    Unicode標準3.2中所定義的字母。code

    基本拉丁字符或其餘國家/地區字符中的十進制數字。對象

    at符號(@)、美圓符號($)、數字符號或下劃線。

(3)、不能是保留字:

     常規標識符不能使用SQL Server內部的保留字,好比char。

(4)、不容許嵌入空格:

二、帶分隔符的標識符

   當必定要使用保留字時,如table,這樣的標識符是SQLServer內部的保留字,若是非得這樣使用,就必須用這樣的方式:"table"。

(1)、分隔符

    T-SQL規定下列符號爲特定的分隔符。

    一、雙引號("):用於表示引用的標識符。

    二、中括號([]):用於表示括號中的標識符。

(2)、什麼時機使用分隔符

    T-SQL常在下列狀況下使用分隔符。

    一、對象名稱或對象名稱的組成部分中包含保留字時。

    二、使用其餘特殊的字符時。

2、數據類型

  T-SQL語言和SQLServer數據庫中的數據一般須要定義一個數據類型,數據類型定義了對象能夠容納的數據的種類。

一、那些對象須要數據類型

(1)、表和視圖的列:

    在定義表或視圖時,其列須要定義數據類型。

(2)、存儲過程的參數:

    在定義存儲過程的T-SQL代碼中定義參數的數據類型。

(3)、變量:

     若是在T-SQL中使用變量,須要定義數據類型。

(4)、帶返回值的函數:

     返回一個或多個特定類型數據值的T-SQL函數中的返回值須要定義數據類型。

(5)、帶返回代碼的存儲過程:

     具備返回代碼的存儲過程。

二、如何選擇恰當的數據類型

(1)、必須

    首先根據須要判斷數據的種類、須要存儲的數據的最大長度和大小,對於數字數據類型還要考慮精度和小數位數,而後再T-SQL中挑選備用的數據類型。

(2)、夠用

    接下來能夠再備用的數據類型中挑選夠用便可的類型做爲最後的方案。好比要表述「×××號碼」這樣的字段,nvarchar和nchar這樣的數據類型均可以,最後咱們可使用nchar(18),由於×××號碼規定爲統一的18位,因此選擇定長的數據類型。

(3)、權衡

    權衡空間和效率,權衡數據的存儲方式等。

    一般狀況下,數據類型的長度越小,存儲大量數據所須要的存儲空間就越小。所以一次I/O讀取到內存中的數據記錄就會越多,一樣大小的內存空間存儲的記錄數量就會更多,這樣T-SQL語句使用數據時從內存讀取的概率就增大了,因此天然效率就高,尤爲是聯機事務頻繁的系統,這樣的設計優勢就十分明顯。"細節決定成敗",數據類型的選擇恰當與否每每會對數據庫系統的性能產生很是大的影響。

三、基本數據類型

名稱

說明

取值範圍

Bit

整數型

0、1或NULL,經常使用於表明Yes(No)、True(False)等

Int

整數型

-2147483648~2147483647

tinyint

整數型

0~255

smallint

整數型

-32768~32768

Bigint

整數型

-9223372036854775808~9223372036854775807

binary

二進制

1~8000字符的定長二進制數據,好比0x2A

varbinary

二進制

1~8000字符的變長二進制數據,varbinary(max)能夠存儲2^31個字節

p_w_picpath

二進制

變長達20億字符的二進制數據

char

字符型

1~8000字符的定長、非Unicode字符數據

varchar

字符型

1~8000字符的非定長的、Unicode字符數據varchar(max)能夠存儲2^31個字符

text

字符型

變長達20億字符的unicode字符數據

nchar

unicode字符型

1~4000定長的、unicode字符數據

nvarchar

unicode字符型

1~4000字符的非定長的、unicode字符數據,nvarchar(max)能夠存儲2^31-1個字符

ntext

unicode字符型

1~1073741823字符、非定長的、unicode字符數據

datetime

日期時間型

1753年1月1日~9999年12月31日的日期和時間

smalldatetime

日期時間型

1900年1月1日~2079年6月6日的日期和時間

decimal

精確數值型

-1038次方+1~1038-1的固定精度和範圍的數值型數據

numeric

精確數值型

同decimal

float

近似數值型

-1.79E+308~1.79E+308之間的浮點數

real

近似數值型

-3.40E+38~3.40E+38之間的浮點數

money

貨幣型

-263~263-1的貨幣型數據,精確到萬分之一

smallmoney

貨幣型

-214748.3648~214748.3647的貨幣型數據,精確到萬分之一

timestamp

特殊類型

時間戳,用於記錄SQLServer在一行數據的活動次序

uniqueidentifier

特殊類型

16位的16進制數據表示的全局惟一標識符(GUID)

sql_variant

特殊類型

存儲除了text、ntext、p_w_picpath和sql_variant以外的SQLServer支持的各類數據類型值的數據類型

SQLServer2008新增數據類型

      一、日期和時間類型

名稱

取值範圍

Time

00:00:00.0000000到23:59:59.0000000,按照hh:mm:ss的格式精確表示時間

Date

00001-01-01到99999-12-31,按照年-月-日的格式表示日期

DateTime2

0001-01-01 00:00:00.0000000到9999-12-31 23:59:59:9999999,表示日期和時間

DateTimeOffset

00000-01-01 00:00:00.0000000到99999-12-31 23:59:59:9999999

      二、hierarchid

      新增的數據類型,用於建立層次結構的表,或引用位於另外一位置的數據層次結構。

3、常量

  常量是指在T-SQL代碼中其值始終不變的數據。常量的定義格式取決於其所屬於的數據類型。

常量的使用不須要定義,直接在T-SQL中使用就能夠,因此須要關注的是各類典型的常量的格式。

一、數值型常量的格式

  數值型常量的格式不須要任何其餘的符號,只須要按照特定的數據類型進行賦值就能夠

(1)、bit常量:

      0、1

(2)、int常量:

      8九、22

(3)、decimal(numeric)常量:

      123.8九、89.0

(4)、float(real)常量:

      100.5E5

(5)、money(smallmoney)常量:

      $十二、$123.90

二、字符串型常量的格式

    字符串型常量的格式須要以單引號(')包含起來。

一、非unicode字符串常量:

     'Hello World'

二、unicode字符串常量:

     N'Hello World'

      N 在這裏表示Unicode,就是雙字節字符。對於西文字符,用一個字節來存儲過足夠了,對於東方文字字符,就須要兩個字節來存儲。Unicode 爲了統1、規範、方便、兼容,就規定西文字符也用兩個字節來存儲。也就是說加 N 就表示字符串用 Unicode 方式存儲。但有時候加與不加都同樣,又是什麼緣由呢?這是因爲自動轉換形成的。

三、單引號做爲字符串常量的處理:

      若是單引號自己也屬於字符串常量的內容,就須要使用單引號將其包含在內,好比'O'''Brien'實際上定義的就是字符串O'Brien。''你好'',定義的就是'你好'。

四、日期時間型常量的格式

      日期時間型常量的格式須要以單引號('')包含起來,和字符串常量的格式一致。

      如:'April 15,1998'  '04/15/98'  '14:30:24'  '04:24 PM'

4、註釋

  在T-SQL代碼中,添加註釋信息是一個很好的習慣,便於程序的可讀性。

一、添加單行註釋

    若是須要添加單行註釋,可使用兩個連字符(--)。

    如: select * from person  --查詢全部的人信息

二、添加多行註釋信息

    若是須要添加多行註釋信息,可使用正斜槓型號字符對(/**/)

    如:  

/*      這是註釋第一行                 這是註釋第二行 */

5、變量

  在T-SQL語言中,常常須要使用變量來臨時賦值,變量經常使用於在T-SQL代碼中做爲存儲執行的計數器,或做爲臨時數據存儲場所。

一、變量的數據類型

    SQLServer支持的數據類型。

二、變量的分類

(1)、全局變量

    T-SQL中的全局變量是由SQLServer系統定義和使用的變量。DBA和用戶可使用全局變量的值,但不能本身定義全局變量。全局變量以兩個@@爲標記,如        @@Connections等。

(2)、局部變量

     T-SQL中的局部變量是由用戶定義和使用的變量,其做用範圍僅僅侷限在定義的T-SQL程序內。局部變量以一個@爲標記,如@A。

三、局部變量的聲明

   在T-SQL程序中,定義局部變量的語法以下。

declare    {{@local_variable data_type}    |{@cursor_variable_namecursor}    |{table_type_definition}    }[,...n]

   其中主要參數說明以下。

    @local_variable:局部變量的名稱,必須以at符號(@)開頭,符合標識符規則。

    data_type:任何有系統提供的或用戶定義的數據類型,但不能是text、ntext或p_w_picpath數據類型。

    @cursor_variable_name:遊標變量的名稱。

    cursor:指定變量是局部遊標變量。

    table_type_definition:定義表數據類型。

四、局部變量的賦值

   T-SQL程序中給局部變量賦值有三種方法。

一、SET語句賦值

     在T-SQL程序中,用SET語句給局部變量賦值的語法以下:

  SET@local_variable=expression

    其中,@local_variable爲局部變量的名稱,expression爲有效的表達式,表示將表達式的值賦予局部變量。

二、select語句賦值

    與上面的SET等效的賦值語句是將SET替換爲SELECT。

  SELECT@local_variable=expression

三、經過選擇語句賦值

    不少狀況下,局部變量須要獲取經過選擇語句查詢某個表後獲得的字段值。

  select@empId=max(empId)  --查出的值賦給局部變量

    若是查詢語句返回的值不止一行,並且變量引用一個非標量表達式,那麼最後變量的值將是最後一行記錄的特定字段的值。

五、局部變量的做用域

    局部變量的做用域就是能夠引用該變量的T-SQL語句的範圍。局部變量的做用域從聲明變量的地方到聲明變量的批處理或存儲過程的結尾。

相關文章
相關標籤/搜索