电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:119日期: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 語言進行了進一步增強。為了讓開發(fā)人員盡快了解這些變化,我們針對 2007 年 6 月 CTP 版本的 SQL Server 2008 中的 T-SQL 語言的新增功能進行了分析和嘗試。本文描述自 SQL Server 2008 CTP1 以來這些語言增強和變化。

本文包含如下內(nèi)容:

· 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ù)。例如:

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

經(jīng)過增強后的 INSERT 語句的語法結(jié)構如下。

[ 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 查詢優(yōu)化程序如何更高效的執(zhí)行查詢。該提示指示優(yōu)化程序?qū)Σ樵円玫谋砗鸵晥D通過索引檢索來作為唯一的查詢執(zhí)行訪問路徑。也就是強制通過索引檢索數(shù)據(jù)。例如:

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 操作符。還有一個新的函數(shù) GROUPING_ID(),它相比 GROUPING() 函數(shù)返回更多分組級別的信息。WITH ROLLUP, WITH CUBE 和 ALL 等非 ISO 標準語法已經(jīng)不再有效。

4. 兼容性級別

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

ALTER DATABASE database_name SET COMPATIBILITY_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ù)類型。如:

USE AdventureWorks;GO

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

對于表類型,有如下約束:1、用戶自定義表類型不能作為表的列或者結(jié)構化用戶自定義類型的域。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ù)無法調(diào)用。

6. 表值參數(shù)

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

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

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 語句在一個基于源數(shù)據(jù)連接結(jié)果集的目標表上執(zhí)行 INSERT、UPDATE 和 DELETE 操作。該語法允許您將一個數(shù)據(jù)源連接到目標表或視圖上。然后在連接后的結(jié)果集上執(zhí)行多種操作。

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 在一張表上執(zhí)行 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;這個示例是一個非常典型的銷售定貨庫存問題。這個示例很簡單,表達的意思就是:如果某一個產(chǎn)品產(chǎn)生了銷售定單數(shù)據(jù),則將其對應的產(chǎn)品庫存除去該銷售定單所產(chǎn)生的數(shù)量,如果當前庫存數(shù)量與該銷售定單數(shù)量相同,則從庫存表中刪除該產(chǎn)品的庫存紀錄。

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

結(jié)論

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

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

主站蜘蛛池模板: 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库-首页-东莞市傲马网络科技有限公司 | 临时厕所租赁_玻璃钢厕所租赁_蹲式|坐式厕所出租-北京慧海通 | 氧化铁红厂家-淄博宗昂化工 | 热缩管切管机-超声波切带机-织带切带机-无纺布切布机-深圳市宸兴业科技有限公司 | 石栏杆_青石栏杆_汉白玉栏杆_花岗岩栏杆 - 【石雕之乡】点石石雕石材厂 | 合肥网带炉_安徽箱式炉_钟罩炉-合肥品炙装备科技有限公司 | 仿真茅草_人造茅草瓦价格_仿真茅草厂家_仿真茅草供应-深圳市科佰工贸有限公司 | 祝融环境-地源热泵多恒系统高新技术企业,舒适生活环境缔造者! | 全自动包装秤_全自动上袋机_全自动套袋机_高位码垛机_全自动包装码垛系统生产线-三维汉界机器(山东)股份有限公司 | 塑料检查井_双扣聚氯乙烯增强管_双壁波纹管-河南中盈塑料制品有限公司 | NM-02立式吸污机_ZHCS-02软轴刷_二合一吸刷软轴刷-厦门地坤科技有限公司 | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 | 首页|专注深圳注册公司,代理记账报税,注册商标代理,工商变更,企业400电话等企业一站式服务-慧用心 | 高空重型升降平台_高空液压举升平台_高空作业平台_移动式升降机-河南华鹰机械设备有限公司 | 驾驶式洗地机/扫地机_全自动洗地机_工业洗地机_荣事达工厂官网 | 专业的压球机生产线及解决方案厂家-河南腾达机械厂 | 切铝机-数控切割机-型材切割机-铝型材切割机-【昆山邓氏精密机械有限公司】 | 绿萝净除甲醛|深圳除甲醛公司|测甲醛怎么收费|培训机构|电影院|办公室|车内|室内除甲醛案例|原理|方法|价格立马咨询 | 地图标注-手机导航电子地图如何标注-房地产商场地图标记【DiTuBiaoZhu.net】 | 贴板式电磁阀-不锈钢-气动上展式放料阀-上海弗雷西阀门有限公司 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 | 电磁流量计_智能防腐防爆管道式计量表-金湖凯铭仪表有限公司 | 包装盒厂家_纸盒印刷_礼品盒定制-济南恒印包装有限公司 | 超声波乳化机-超声波分散机|仪-超声波萃取仪-超声波均质机-精浩机械|首页 | 医用空气消毒机-医用管路消毒机-工作服消毒柜-成都三康王 | 骨密度检测仪_骨密度分析仪_骨密度仪_动脉硬化检测仪专业生产厂家【品源医疗】 | lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 半容积式换热器_北京浮动盘管换热器厂家|北京亿丰上达 | 河南砖机首页-全自动液压免烧砖机,小型砌块水泥砖机厂家[十年老厂] | atcc网站,sigma试剂价格,肿瘤细胞现货,人结肠癌细胞株购买-南京科佰生物 | 上海风淋室_上海风淋室厂家_上海风淋室价格_上海伯淋 | 齿辊分级破碎机,高低压压球机,立式双动力磨粉机-郑州长城冶金设备有限公司 | 首页-瓜尔胶系列-化工单体系列-油田压裂助剂-瓜尔胶厂家-山东广浦生物科技有限公司 | 阁楼货架_阁楼平台_仓库仓储设备_重型货架_广州金铁牛货架厂 | 科普仪器菏泽市教育教学仪器总厂 | 减速机电机一体机_带电机减速器一套_德国BOSERL电动机与减速箱生产厂家 | 深圳公司注册-工商注册代理-注册公司流程和费用_护航财税 | 一体化净水器_一体化净水设备_一体化水处理设备-江苏旭浩鑫环保科技有限公司 | 西安耀程造价培训机构_工程预算实训_广联达实作实操培训 | 北京模型公司-工业模型-地产模型-施工模型-北京渝峰时代沙盘模型制作公司 | 即用型透析袋,透析袋夹子,药敏纸片,L型涂布棒-上海桥星贸易有限公司 | 重庆小面培训_重庆小面技术培训学习班哪家好【终身免费复学】 |