日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

sql server 2008 對 t-sql 語言的增強

瀏覽:192日期:2023-11-02 19:21:08

SQL Server 2008 對 T-SQL 語言的增強周融,2007 年 7 月(C) 2001-2007 All Rights Reserved.

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

本文包含如下內容:

· T-SQL 行構造器· FORCESEEK 表提示· GROUPING SETS· 兼容性級別· 用戶自定義表數據類型· 表值參數· MERGE 語句

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

1、T-SQL 行構造器

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

CREATE TABLE #a( Column1 nvarchar(max), Column2 nvarchar(max));GO

INSERT INTO #aVALUES (('1', '1'),('2', '2'));

SELECT * FROM #a;GO

DROP TABLE #a;GO

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

[ WITH <common_table_expression> [ ,...n ] ]INSERT [ TOP ( expression ) [ PERCENT ] ] [ INTO ] { <object> | rowset_function_limited [ WITH ( <Table_Hint_Limited> [ ...n ] ) ] }{ [ ( column_list ) ] [ <OUTPUT Clause> ] { VALUES ( ( { DEFAULT | NULL | expression } [ ,...n ] ) [ ,...n ] ) | derived_table | execute_statement | <dml_table_source> | DEFAULT VALUES } } [; ]

<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 查詢優化程序如何更高效的執行查詢。該提示指示優化程序對查詢引用的表和視圖通過索引檢索來作為唯一的查詢執行訪問路徑。也就是強制通過索引檢索數據。例如:

USE tempdb;GODROP TABLE t;GOCREATE TABLE t(i int UNIQUE, j int, vc varchar(100));CREATE INDEX t_vc ON t(vc);GODECLARE @p1 int, @p2 int, @p3 int, @p4 int, @p5 int;SELECT * FROM t WHERE i IN (@p1, @p2, @p3, @p4, @p5);GODECLARE @p1 int, @p2 int, @p3 int, @p4 int, @p5 int;SELECT * FROM t WITH (FORCESEEK) WHERE i IN (@p1, @p2, @p3, @p4, @p5);GOSELECT * FROM t WHERE vc LIKE 'Test%';GOSELECT * FROM t WITH (FORCESEEK) WHERE vc LIKE 'Test%';GODECLARE @vc varchar(100);SELECT * FROM t WHERE vc LIKE @vc;GODECLARE @vc varchar(100);SELECT * FROM t WITH (FORCESEEK) where vc like @vc;GO3. GROUPING SETS

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

4. 兼容性級別

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

ALTER DATABASE database_name SET COMPATIBILITY_LEVEL = { 80 | 90 | 100 }您可以為 database_name 為名稱的數據庫設置特定兼容性級別。80、90 和 100 分別代表 SQL Server 2000、SQL Server 2005 和 SQL Server 2008。

5. 用戶自定義表數據類型

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

請使用 CREATE TYPE 語句創建這種數據類型。如:

USE AdventureWorks;GO

/**//* Create a user-defined table type */CREATE TYPE LocationTableType AS TABLE ( LocationName VARCHAR(50), CostRate INT );GO

對于表類型,有如下約束:1、用戶自定義表類型不能作為表的列或者結構化用戶自定義類型的域。2、基于用戶自定義表類型的別名類型。3、不允許 NOT FOR REPLICATION 選項。4、CHECK 約束需要一個計算列。5、在計算列上的主鍵必須包含 NOT NULL 和 PERSISTED 約束。6、不能在用戶自定義表類型上創建非簇索引。除非索引是創建 PRIMARY KEY 或 UNIQUE 約束的返回值。7、不能指定 DEFAULT 值。8、一旦用戶自定義表類型被創建,則它就無法更改。9、如果沒有定義用戶自定義表類型上的計算列,則用戶自定義函數無法調用。

6. 表值參數

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

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

USE AdventureWorks;GO

/**//* Create a table type. */CREATE TYPE LocationTableType AS TABLE ( LocationName VARCHAR(50), CostRate INT );GO

/**//* Create a procedure to receive data for the table-valued parameter. */CREATE PROCEDURE usp_InsertProductionLocation @TVP LocationTableType READONLY AS SET NOCOUNT ON INSERT INTO [AdventureWorks].[Production].[Location] ([Name] ,[CostRate] ,[Availability] ,[ModifiedDate]) SELECT *, 0, GETDATE() FROM; @TVP; GO

/**//* Declare a variable that references the type. */DECLARE @LocationTVP AS LocationTableType;

/**//* Add data to the table variable. */INSERT INTO @LocationTVP (LocationName, CostRate) SELECT [Name], 0.00 FROM [AdventureWorks].[Person].[StateProvince];

/**//* Pass the table variable data to a stored procedure. */EXEC usp_InsertProductionLocation @LocationTVP;GO

7. MERGE 語句

這個新增的 Transaction SQL 語句在一個基于源數據連接結果集的目標表上執行 INSERT、UPDATE 和 DELETE 操作。該語法允許您將一個數據源連接到目標表或視圖上。然后在連接后的結果集上執行多種操作。

MERGE 的語法為:

[ WITH <common_table_expression> [,...n] ]MERGE [ TOP ( expression ) [ PERCENT ] ] [ INTO ] target_table [ [ AS ] table_alias ] [ WITH ( <merge_hint> ) ]USING <table_source>ON <search_condition>[ WHEN MATCHED [ AND <search_condition> ] THEN <merge_matched> ][ WHEN [TARGET] NOT MATCHED [ AND <search_condition> ] THEN <merge_not_matched> ][ WHEN SOURCE NOT MATCHED [ AND <search_condition> ] THEN <merge_ matched> ]<output_clause>[ OPTION ( <query_hint> [ ,...n ] ) ];<merge_hint>::= { [ <table_hint_limited> [ ,...n ] ] [ [ , ] INDEX ( index_val [ ,...n ] ) ] }

<table_source> ::= { table_or_view_name [ [ AS ] table_alias ] [ <tablesample_clause> ] [ WITH ( table_hint [ [ , ]...n ] ) ] | rowset_function [ [ AS ] table_alias ] [ ( bulk_column_alias [ ,...n ] ) ] | user_defined_function [ [ AS ] table_alias ] | OPENXML <openxml_clause> | derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ] | <joined_table> | <pivoted_table> | <unpivoted_table> }

<merge_matched>::= { UPDATE SET <set_clause> | DELETE }

<set_clause>::= { column_name = { expression | DEFAULT | NULL } | { udt_column_name. { { property_name = expression | field_name = expression } | method_name ( argument [ ,...n ] ) } } | column_name { .WRITE ( expression , @Offset , @Length ) } | @variable = expression } [ ,...n ]

<merge_not_matched>::= INSERT [ ( <column_list> ) ] { VALUES ( <values_list> ) | DEFAULT VALUES }

<output_clause>::={ [ OUTPUT <dml_select_list> INTO { @table_variable | output_table } [ (column_list) ] ] [ OUTPUT <dml_select_list> ]}<dml_select_list>::={ <column_name> | scalar_expression } [ [AS] column_alias_identifier ] [ ,...n ]

<column_name> ::= { DELETED | INSERTED | from_table_name } . { * | column_name } | $ACTION

示例:在一條 SQL 語句中使用 WHERE 在一張表上執行 UPDATE 和 DELETE 操作

USE AdventureWorks;GOMERGE Production.ProductInventory AS piUSING (SELECT ProductID, SUM(OrderQty) FROM Sales.SalesOrderDetail sod JOIN Sales.SalesOrderHeader soh ON sod.SalesOrderID = soh.SalesOrderID AND soh.OrderDate = GETDATE() GROUP BY ProductID) AS src (ProductID, OrderQty)ON (pi.ProductID = src.ProductID)WHEN MATCHED AND pi.Quantity - src.OrderQty <> 0 THEN UPDATE SET pi.Quantity = pi.Quantity - src.OrderQtyWHEN MATCHED AND pi.Quantity - src.OrderQty = 0 THEN DELETE;這個示例是一個非常典型的銷售定貨庫存問題。這個示例很簡單,表達的意思就是:如果某一個產品產生了銷售定單數據,則將其對應的產品庫存除去該銷售定單所產生的數量,如果當前庫存數量與該銷售定單數量相同,則從庫存表中刪除該產品的庫存紀錄。

我們看到,利用 MERGE 語句可以將復雜的 SQL 語句簡化。它比起 IF、CASE 等更加靈活和強大。

結論

Microsoft SQL Server 2008 對事務性 SQL 語言做了一些增強,提高了查詢效率。使得 SQl; Server 成為大中型企業數據庫的首先產品。SQL Server 2008 將伴隨 Visual Studio 2008 一起發布,開發人員提前了解這些信息有助于在 SQL Server 的新版本發布后快速建立基于該版本的企業級應用程序。

有關 SQL Server 2008 的其他增強信息,請參見 MSDN 幫助集合 ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_0evalplan/html/8f625d5a-763c-4440-97b8-4b823a6e2439.htm。

標簽: Sql Server 數據庫
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久精品国产一区二区| 免费黄网站欧美| 欧美一区影院| 91成人精品观看| 欧美一区网站| 国产欧美69| 麻豆成人av在线| 国产精品一区二区中文字幕| 国产另类在线| 国产精品qvod| 麻豆精品99| 国内精品亚洲| а√天堂8资源中文在线| 久久精品国产99国产精品| 国产高清精品二区| 麻豆中文一区二区| 精品高清久久| 青青青免费在线视频| 欧美69视频| 日韩在线一区二区| **爰片久久毛片| 国产一区二区三区亚洲综合| 都市激情国产精品| 在线视频观看日韩| 日韩一区二区免费看| 久久亚洲风情| 婷婷五月色综合香五月| 久久精品资源| 99精品视频在线观看免费播放| 中文国产一区| 国产一区 二区| 精品国产鲁一鲁****| 999精品色在线播放| 国产精品美女久久久| 日本国产欧美| 国产一区二区三区不卡av| 91精品在线观看国产| 久久亚洲视频| 久久黄色影视| 日韩精品dvd| 蜜桃av一区二区| 久久精品国产久精国产| 黄色欧美日韩| 久久wwww| 97精品在线| 日韩一二三区在线观看| 99国产精品久久久久久久成人热| 成人在线观看免费视频| 亚洲色图综合| 亚洲欧洲国产精品一区| 欧美精品九九| 国产综合婷婷| 精品五月天堂| 成人国产精品一区二区网站| 国内精品伊人| 国产劲爆久久| 国产精品任我爽爆在线播放 | 久久免费影院| 午夜一区在线| 日本精品影院| 天堂√中文最新版在线| 欧美日韩夜夜| 日韩一区二区中文| 国产亚洲精品美女久久| 国产日韩欧美三区| 高清日韩中文字幕| 亚洲女同av| 免费人成在线不卡| 国产精品白丝一区二区三区| 久久香蕉网站| 日韩av不卡一区二区| 亚洲精品少妇| 国产精品美女久久久浪潮软件| 国产精品调教| 午夜在线视频观看日韩17c| 国产一区丝袜| 深夜日韩欧美| 亚洲电影在线| 精品视频国产| 久久国产精品毛片| 日本不卡免费高清视频在线| 欧美亚洲三区| 丝瓜av网站精品一区二区| 日韩一区二区在线免费| 久久不见久久见免费视频7 | 欧美亚洲在线日韩| 麻豆久久久久久| 亚洲精品黄色| 99视频精品免费观看| 日韩在线二区| 久久精品女人| 日韩不卡一区二区| 91精品1区| 久久男女视频| 精品国产一区二区三区av片| 国产亚洲精品美女久久久久久久久久| 六月婷婷一区| 亚州av乱码久久精品蜜桃| 日韩欧美字幕| 国产精品黑丝在线播放| 国产亚洲精品美女久久| 亚洲精品乱码日韩| 免费观看日韩电影| 日韩亚洲在线| 在线观看免费一区二区| 欧洲av不卡| 午夜av成人| 久久免费精品| 免费在线观看一区| 国产剧情一区二区在线观看| 欧美一区久久| 日韩精品亚洲一区二区三区免费| 免费在线视频一区| 国产精品日本欧美一区二区三区| 欧美中文一区二区| 欧美中文一区二区| 久久久久久免费视频| 日韩久久一区二区三区| 国产成人77亚洲精品www| 精品三级在线| 国产成人在线中文字幕| 国产精品原创| 欧美成人精品一级| 久久久久九九精品影院| 麻豆极品一区二区三区| 精品网站aaa| 日韩久久精品网| 久久裸体视频| 2023国产精品久久久精品双| 在线国产一区| 日韩精品一级二级 | 亚洲精品一二| 日本少妇精品亚洲第一区| 国产调教精品| 久久精品资源| 成人午夜亚洲| 久久久久欧美精品| 欧美a级片一区| 国产偷自视频区视频一区二区| 蜜臀va亚洲va欧美va天堂| 日韩精品a在线观看91| 国产精品视频3p| 97精品一区| 国户精品久久久久久久久久久不卡| 伊人成人网在线看| 蜜桃av一区二区在线观看| 日韩精品亚洲aⅴ在线影院| 国产精品夜夜夜| 国产99在线| 99香蕉国产精品偷在线观看| 91久久在线| 亚洲精品动态| 美女视频免费精品| 美女网站视频一区| 丝瓜av网站精品一区二区| 欧美久久精品| 欧美日韩视频网站| 亚洲一区二区三区免费在线观看| 天堂俺去俺来也www久久婷婷| 久久99免费视频| 91精品综合| 日韩精品五月天| 高清在线一区| 99热精品在线| 国产精品白丝久久av网站| 中文字幕成在线观看| 国产一区91| 国产福利亚洲| 欧美午夜不卡| 国产精品手机在线播放| 久久精品青草| 日韩精品免费视频一区二区三区| 久久精品理论片| 日韩一级不卡| 国产女人18毛片水真多18精品| 日韩在线短视频| 中文一区一区三区免费在线观| 国产精品chinese| 欧美日韩在线播放视频| 亚洲综合图色| 国产精品99久久免费| 亚洲午夜视频| 国产精品丝袜在线播放| 欧美.日韩.国产.一区.二区 | 日本不卡在线视频| 日韩欧美1区| 日本欧美大码aⅴ在线播放| 三级小说欧洲区亚洲区| 欧美日韩va| 午夜欧美视频| 美腿丝袜在线亚洲一区| 国产精品毛片| 国产不卡人人| 一区二区国产在线观看| 日韩a一区二区| 日韩精品欧美大片| 蜜臀91精品国产高清在线观看| 欧美国产亚洲精品| 亚洲欧美日本国产专区一区| 精品三级av|