4.兼容性级别
新的alter DATABASE SET COMPATIBILITY_LEVEL语法替换了sp_dbcomplevel存储过程。它用来设置特定数据库的兼容性级别。其语法形式为:
alter DATABASE database_name SET COMPATIBILITY_LEVEL = { 80 | 90 | 100 } |
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] ] |
示例:在一条SQL语句中使用where在一张表上执行update和delete操作
USE AdventureWorks; GO MERGE Production.ProductInventory AS pi USING (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.OrderQty WHEN 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的新版本发布后快速建立基于该版本的企业级应用程序。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
SQL Server 2016新变化:内存中OLTP功能大改进
SQL Server 2016的许多功能得到改进,内存中OLTP(in-memory OLTP)也不例外,包括扩展性、性能以及扩展T-SQL用于使用和管理内存优化表的功能方面。
-
优化T-SQL提升SQL Server数据库性能
本文中提供了八种优化T-SQL代码避免SQL Server数据库性能瓶颈的技巧,我们可以据此优化数据库应用。
-
配置SQL Server数据库恢复模式的两种方法
本文我们讨论了配置SQL Server恢复模式的两种方式,用T-SQL或者SQL Server管理工具都可以修改恢复模式的设置。
-
用T-SQL在SQL Server 2012中创建用户自定义角色
SQL Server 2012中引入了两项功能,即创建用户自定义服务器角色和分配服务器级别的权限。本文为初级DBA给出了一个用户自定义服务器角色的示范用例。