IT貓撲網:您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機版|論壇轉貼|軟件發(fā)布

您當前所在位置:首頁數(shù)據(jù)庫MSSQL → SQL Server 2008對T-SQL語言的增強

SQL Server 2008對T-SQL語言的增強

時間:2015/6/28來源:IT貓撲網作者:網管聯(lián)盟我要評論(0)

Microsoft sql server 2008 對 T-SQL 語言進行了進一步增強。為了讓開發(fā)人員盡快了解這些變化,我們針對 2007 年 6 月 CTP 版本的 SQL Server 2008 中的 T-SQL 語言的新增功能進行了分析和嘗試。本文描述自 SQL Server 2008 CTP1 以來這些語言增強和變化。

本文包含如下內容:

· T-SQL 行構造器

· FORCESEEK 表提示

· GROUPING SETS

· 兼容性級別

· 用戶自定義表數(shù)據(jù)類型

· 表值參數(shù)

· MERGE 語句

本文適用于:Microsoft)R) SQL Server(TM) 2008 Developer Edition June 2007 CTP

1、T-SQL 行構造器

T-SQL 行構造器(Row Constructors)用來在 INSERT 語句中一次性插入多行數(shù)據(jù)。例如:

以下為引用的內容:

CREATETABLE#a
(
  Column1nvarchar(max),
  Column2nvarchar(max)
);
GO
INSERTINTO#a
VALUES(
('1','1'),
('2','2')
);
SELECT*FROM#a;
GO
DROPTABLE#a;
GO

經過增強后的 INSERT 語句的語法結構如下。

以下為引用的內容:

[WITH<common_table_expression>[,...n]]
INSERT 
  [TOP(expression)[PERCENT]] 
  [INTO] 
  {<object>|rowset_function_limited 
   [WITH(<Table_Hint_Limited>[...n])]
  }
{
  [(column_list)] 
  [<OUTPUTClause>]
  {VALUES(({DEFAULT|NULL|expression}[,...n])[,...n])
  |derived_table 
  |execute_statement 
  |<dml_table_source>
  |DEFAULTVALUES 
  } 
} 
[;]
<object>::=
{ 
  [server_name.database_name.schema_name. 
   |database_name.[schema_name]. 
   |schema_name. 
  ]
    table_or_view_name
}
<dml_table_source>::=
  SELECT<select_list>
  FROM(<dml_statement_with_output_clause>) 
           [AS]table_alias[(column_alias[,...n])]
    [WHERE<search_condition>]
  [OPTION(<query_hint>[,...n])]

2. FORCESEEK 提示

FORCESEEK 是一個新的表提示(Table Hints),它用來指定 SQL Server 查詢優(yōu)化程序如何更高效的執(zhí)行查詢。該提示指示優(yōu)化程序對查詢引用的表和視圖通過索引檢索來作為唯一的查詢執(zhí)行訪問路徑。也就是強制通過索引檢索數(shù)據(jù)。例如:

以下為引用的內容:

USEtempdb;
GO
DROPTABLEt;
GO
CREATETABLEt(iintUNIQUE,jint,vcvarchar(100));
CREATEINDEXt_vcONt(vc);
GO
DECLARE@p1int,@p2int,@p3int,@p4int,@p5int;
SELECT*FROMtWHEREiIN(@p1,@p2,@p3,@p4,@p5);
GO
DECLARE@p1int,@p2int,@p3int,@p4int,@p5int;
SELECT*FROMtWITH(FORCESEEK)WHEREiIN(@p1,@p2,@p3,@p4,@p5);
GO
SELECT*FROMtWHEREvcLIKE'Test%';
GO
SELECT*FROMtWITH(FORCESEEK)WHEREvcLIKE'Test%';
GO
DECLARE@vcvarchar(100);
SELECT*FROMtWHEREvcLIKE@vc;
GO
DECLARE@vcvarchar(100);
SELECT*FROMtWITH(FORCESEEK)wherevclike@vc;
GO

3. GROUPING SETS

新的 T-SQL 對 GROUP BY 子句增加了 GROUPING SETS, ROLLUP 和 CUBE 操作符。還有一個新的函數(shù) GROUPING_ID(),它相比 GROUPING() 函數(shù)返回更多分組級別的信息。WITH ROLLUP, WITH CUBE 和 ALL 等非 ISO 標準語法已經不再有效。

4. 兼容性級別

新的 ALTER DATABASE SET COMPATIBILITY_LEVEL 語法替換了 sp_dbcomplevel 存儲過程。它用來設置特定數(shù)據(jù)庫的兼容性級別。其語法形式為:

以下為引用的內容:

ALTERDATABASEdatabase_name 
SetcOMPATIBILITY_LEVEL={80|90|100}

您可以為 database_name 為名稱的數(shù)據(jù)庫設置特定兼容性級別。80、90 和 100 分別代表 SQL Server 2000、SQL Server 2005 和 SQL Server 2008。

5. 用戶自定義表數(shù)據(jù)類型

現(xiàn)在,SQL Server 提供一種新的用戶自定義數(shù)據(jù)類型——自定義表數(shù)據(jù)類型(User-defined Table Types)。它可以作為參數(shù)提供給語句、存儲過程或者函數(shù)。您還可以為它創(chuàng)建唯一約束和主鍵。

請使用 CREATE TYPE 語句創(chuàng)建這種數(shù)據(jù)類型。如:

以下為引用的內容:

USEAdventureWorks;
GO
/**//*Createauser-definedtabletype*/
CREATETYPELocationTableTypeASTABLE 
(LocationNameVARCHAR(50)
,CostRateINT);
GO

對于表類型,有如下約束:

1、用戶自定義表類型不能作為表的列或者結構化用戶自定義類型的域。

2、基于用戶自定義表類型的別名類型。

3、不允許 NOT FOR REPLICATION 選項。

4、CHECK 約束需要一個計算列。

5、在計算列上的主鍵必須包含 NOT NULL 和 PERSISTED 約束。

6、不能在用戶自定義表類型上創(chuàng)建非簇索引。除非索引是創(chuàng)建 PRIMARY KEY 或 UNIQUE 約束的返回值。

7、不能指定 DEFAULT 值。

8、一旦用戶自定義表類型被創(chuàng)建,則它就無法更改。

9、如果沒有定義用戶自定義表類型上的計算列,則用戶自定義函數(shù)無法調用。

6. 表值參數(shù)

數(shù)據(jù)庫引擎現(xiàn)在支持一種新的參數(shù)類型來引用用戶自定義表類型(參考 5)。表值參數(shù)可以發(fā)送更多的 SQL Server 數(shù)據(jù)。

下面的示例展示了如何使用表值參數(shù)。

以下為引用的內容:

USEAdventureWorks;
GO
/**//*Createatabletype.*/
CREATETYPELocationTableTypeASTABLE 
(LocationNameVARCHAR(50)
,CostRateINT);
GO
/**//*Createaproceduretoreceivedataforthetable-valuedparameter.*/
CREATEPROCEDUREusp_InsertProductionLocation
  @TVPLocationTableTypeREADONLY
  AS 
  SETNOCOUNTON
  INSERTINTO[AdventureWorks].[Production].[Location]

關鍵詞標簽:增強,語言,GO,SQL,...

相關閱讀

文章評論
發(fā)表評論

熱門文章 SqlServer2005對現(xiàn)有數(shù)據(jù)進行分區(qū)具體步驟SqlServer2005對現(xiàn)有數(shù)據(jù)進行分區(qū)具體步驟sql server系統(tǒng)表損壞的解決方法sql server系統(tǒng)表損壞的解決方法MS-SQL2005服務器登錄名、角色、數(shù)據(jù)庫用戶MS-SQL2005服務器登錄名、角色、數(shù)據(jù)庫用戶Access、SQL Server、Oracle常見應用的區(qū)別Access、SQL Server、Oracle常見應用的區(qū)別

相關下載

人氣排行 如何遠程備份(還原)SQL2000數(shù)據(jù)庫SQL2000數(shù)據(jù)庫遠程導入(導出)數(shù)據(jù)配置和注冊ODBC數(shù)據(jù)源-odbc數(shù)據(jù)源配置教程SQL2000和SQL2005數(shù)據(jù)庫服務端口查看或修改SQL Server 2005降級到2000的正確操作步驟修改Sql Server唯一約束教程淺談JSP JDBC來連接SQL Server 2005的方法SQL Server創(chuàng)建表語句介紹