增加了varchar的最大限制本来是8K,现在增加到2GB,定义变量的时候可以使用MAX来设置字段大小。例如varchar(max);
增加了XML类型
增加了TRY/CATCH功能
Set XACT_ABORT on
BEGIN TRY
……
END TRY
BEGIN CATCH
……
END CATCH
更新功能 WRITE :替换指定位置的字符串
例如: test.write(“aaaa”,1,1)
快照隔离级别:
ALTER DATABASE AdventureWorks
SET READ_COMMITTED_SNAPSHOT ON;
示例:
1、create database demo2 —创建数据库
go
use demo2
alter database demo2 set allow_snapshot_isolation on ――设定快照隔离
create table test ――创建表
( tid int not null primary key,
tname varchar(50) not null
)
insert into test values(1,'version1')
insert into test values(2,'version2')
2、 --新建连接
use demo2
begin tran――使用事物,让此更新未处理完成,为了达到锁表的功能
update test set tname='version3' where tid=2
select * from test
3、 --新建连接
use demo2
增加了varchar的最大限制本来是8K,现在增加到2GB,定义变量的时候可以使用MAX来设置字段大小。例如varchar(max);
增加了XML类型
增加了TRY/CATCH功能
Set XACT_ABORT on
BEGIN TRY
……
END TRY
BEGIN CATCH
……
END CATCH
更新功能 WRITE :替换指定位置的字符串
例如: test.write(“aaaa”,1,1)
快照隔离级别:
ALTER DATABASE AdventureWorks
SET READ_COMMITTED_SNAPSHOT ON;
示例:
1、create database demo2 —创建数据库
go
use demo2
alter database demo2 set allow_snapshot_isolation on ――设定快照隔离
create table test ――创建表
( tid int not null primary key,
tname varchar(50) not null
)
insert into test values(1,'version1')
insert into test values(2,'version2')
2、 --新建连接
use demo2
begin tran――使用事物,让此更新未处理完成,为了达到锁表的功能
update test set tname='version3' where tid=2
select * from test
3、 --新建连接
use demo2
set transaction isolation level snapshot
select * from test――可以查询看看结果。
set transaction isolation level snapshot
select * from test――可以查询看看结果。
-------
top语句的增强功能
以前的top语句不能放在DML语句中,现在就可以放在DML语句中。
--create a table and insert some data
use demo
go
CREATE TABLE toptest (column1 VARCHAR(150))
go
INSERT INTO toptest VALUES('t1')
INSERT INTO toptest VALUES('t2')
INSERT INTO toptest VALUES('t3')
INSERT INTO toptest VALUES('t4')
INSERT INTO toptest VALUES('t5')
INSERT INTO toptest VALUES('t6')
INSERT INTO toptest VALUES('t7')
INSERT INTO toptest VALUES('t8')
select * from toptest
go
CREATE TABLE toptest2 (column2 VARCHAR(150))
go
INSERT INTO toptest2 VALUES('c1')
INSERT INTO toptest2 VALUES('c2')
--declare 3 variables
DECLARE @a INT
DECLARE @b INT
DECLARE @c INT
--set values
SET @a = 10
SET @b = 5
SELECT @c = @a/@b
--use the calculated expression
SELECT TOP(@c) * FROM toptest
--use a SELECT statement as expression
SELECT TOP(SELECT COUNT(*) FROM toptest2) *
FROM toptest
--DML top
DELETE TOP(2) toptest where column1>'t6'
--this sets 't1' and 't2' to 'hi'
UPDATE TOP(2) toptest SET column1 = 'hi' where column1<='t2'
SELECT * FROM toptest
-------------
新增排序更能
ROW_NUMBER是结果集的顺序, 而不是数据库中纪录存放的原始顺序
RANK()
DENSE_RANK()
use demo
go
create table rankorder
(orderid int,
qty int
)
go
insert rankorder values(30001,10)
insert rankorder values(10001,10)
insert rankorder values(10006,10)
insert rankorder values(40005,10)
insert rankorder values(30003,15)
insert rankorder values(30004,20)
insert rankorder values(20002,20)
insert rankorder values(20001,20)
insert rankorder values(10005,30)
insert rankorder values(30007,30)
insert rankorder values(40001,40)
go
SELECT orderid,qty,
ROW_NUMBER() OVER(ORDER BY qty) AS rownumber,
RANK() OVER(ORDER BY qty) AS rank,
DENSE_RANK() OVER(ORDER BY qty) AS denserank
FROM rankorder
ORDER BY qty
-------------
通用表表达式(CTE)
普通CTE示例:
USE AdventureWorks
GO
WITH SalesCTE(ProductID, SalesOrderID)
AS
(
SELECT ProductID, COUNT(SalesOrderID)
FROM Sales.SalesOrderDetail
GROUP BY ProductID
)
SELECT * FROM SalesCTE
递归CTE示例:
-- Using CTEs Recursively
use demo
go
CREATE TABLE CarParts
(
CarID int NOT NULL,
Part varchar(15),
SubPart varchar(15),
Qty int
)
GO
INSERT CarParts
VALUES (1, 'Body', 'Door', 4)
INSERT CarParts
VALUES (1, 'Body', 'Trunk Lid', 1)
INSERT CarParts
VALUES (1, 'Body', 'Car Hood', 1)
INSERT CarParts
VALUES (1, 'Door', 'Handle', 1)
INSERT CarParts
VALUES (1, 'Door', 'Lock', 1)
INSERT CarParts
VALUES (1, 'Door', 'Window', 1)
INSERT CarParts
VALUES (1, 'Body', 'Rivets', 1000)
INSERT CarParts
VALUES (1, 'Door', 'Rivets', 100)
INSERT CarParts
VALUES (1, 'Door', 'Mirror', 1)
go
select * from CarParts
go
WITH CarPartsCTE(SubPart, Qty)
AS
(
-- Anchor Member (AM):
-- SELECT query that doesn’t refer back to CarPartsCTE
SELECT SubPart, Qty
FROM CarParts
WHERE Part = 'Body'
UNION ALL
-- Recursive Member (RM):
-- SELECT query that refers back to CarPartsCTE
SELECT CarParts.SubPart, CarPartsCTE.Qty * CarParts.Qty
FROM CarPartsCTE
INNER JOIN CarParts ON CarPartsCTE.SubPart = CarParts.Part
WHERE CarParts.CarID = 1
)
--outer query
SELECT SubPart, SUM(Qty) AS TotalNUM
FROM CarPartsCTE
GROUP BY SubPart
------
Pivot/UNPivot/Apply
Pivot:行转换成列
UNPivot:列转换成行
Apply:关系运算符允许对表外部的每个行调用指定的表值函数一次。可以在查询的from子句中指定Apply,其方式与使用join关系运算符类似
use demo
go
create table orders
(Customer varchar(10) not null,
product varchar(20) not null,
quantity int not null)
go
insert orders values('Mike', 'Bike',3)
insert orders values('Mike','Chain',2)
insert orders values('Mike','Bike',5)
insert orders values('Lisa','Bike',3)
insert orders values('Lisa','Chain',3)
insert orders values('Lisa','Chain',4)
insert orders values('Lisa','Bike',2)
select * from orders
select * from orders
pivot (sum(quantity) for product in ([Bike],[Chain])) as a
use demo
go
CREATE TABLE SALES1
(
[Year] INT,
Quarter CHAR(2),
Amount FLOAT
)
GO
INSERT INTO SALES1 VALUES (2001, 'Q1', 80)
INSERT INTO SALES1 VALUES (2001, 'Q2', 70)
INSERT INTO SALES1 VALUES (2001, 'Q3', 55)
INSERT INTO SALES1 VALUES (2001, 'Q3', 110)
INSERT INTO SALES1 VALUES (2001, 'Q4', 90)
INSERT INTO SALES1 VALUES (2002, 'Q1', 200)
INSERT INTO SALES1 VALUES (2002, 'Q2', 150)
INSERT INTO SALES1 VALUES (2002, 'Q2', 40)
INSERT INTO SALES1 VALUES (2002, 'Q2', 60)
INSERT INTO SALES1 VALUES (2002, 'Q3', 120)
INSERT INTO SALES1 VALUES (2002, 'Q3', 110)
INSERT INTO SALES1 VALUES (2002, 'Q4', 180)
GO
SELECT * FROM SALES1
PIVOT
(SUM (Amount) --Aggregate the Amount column using SUM
FOR [Quarter] --Pivot the Quarter column into column headings
IN (Q1, Q2, Q3, Q4)) --use these quarters
AS P
GO
select * into temp1 from orders
pivot (sum(quantity) for product in ([Bike],[Chain])) as a
select * from temp1
select customer, product,quantity
froam temp1
unpivot(quantity for product in ([Bike],[Chain])) as a
use demo
go
CREATE TABLE Arrays
(
aid INT NOT NULL IDENTITY PRIMARY KEY,
array VARCHAR(7999) NOT NULL
)
go
INSERT INTO Arrays VALUES('')
INSERT INTO Arrays VALUES('10')
INSERT INTO Arrays VALUES('20,40,30')
INSERT INTO Arrays VALUES('-1,-3,-5')
GO
CREATE FUNCTION function1(@arr AS VARCHAR(7999))
RETURNS @t TABLE(pos INT NOT NULL, value INT NOT NULL)
AS
BEGIN
DECLARE @end AS INT, @start AS INT, @pos AS INT
SELECT @arr = @arr + ',', @pos = 1,
@start = 1, @end = CHARINDEX(',', @arr, @start)
WHILE @end > 1
BEGIN
INSERT INTO @t VALUES(@pos, SUBSTRING(@arr, @start, @end - @start))
SELECT @pos = @pos + 1,
@start = @end + 1, @end = CHARINDEX(',', @arr, @start)
END
RETURN
END
--test
select * from function1('200,400,300')
go
SELECT A.aid, F.*
FROM Arrays AS A
CROSS APPLY function1(array) AS F
go
SELECT A.aid, F.*
FROM Arrays AS A
OUTER APPLY function1(array) AS F
GO
------------
dll 触发器
use demo
go
CREATE TRIGGER prevent_drop_table ON DATABASE FOR DROP_TABLE
AS
RAISERROR('Not allowed to drop tables.', 10, 1)
PRINT 'DROP TABLE attempt in database ' + DB_NAME() + '.'
PRINT CONVERT (nvarchar (1000),EventData())
ROLLBACK
GO
-- test
CREATE TABLE TestDROP(col1 INT)
go
INSERT INTO TestDROP VALUES(1)
drop talbe testdrop
-- Server
CREATE TRIGGER audit_ddl_logins ON ALL SERVER
FOR CREATE_LOGIN, ALTER_LOGIN, DROP_LOGIN
AS
PRINT 'DDL LOGIN took place.'
PRINT CONVERT (nvarchar (1000),EventData())
GO
-- test
CREATE LOGIN login1 WITH PASSWORD = '123'
ALTER LOGIN login1 WITH PASSWORD = 'xyz'
DROP LOGIN login1
分享到:
相关推荐
5. **Chapter 08 - Data Modification**:这一部分聚焦于如何使用T-SQL修改数据,包括INSERT语句来插入新记录,UPDATE用于更新现有记录,以及DELETE语句用于删除数据。同时会涉及数据完整性与事务处理。 6. **...
- **资源管理**:介绍了SQL Server 2008中的一些新特性,如Resource Governor,用以更有效地分配系统资源。 #### 五、安全性和审计 书中还特别强调了安全性的重要性,并提供了以下内容: - **用户权限管理**:...
在SQL Server 2008版本中,T-SQL得到了许多增强和改进,这本书将帮助读者掌握这些新特性,提升在数据库管理和应用程序开发中的效率。以下是书中可能涵盖的一些关键知识点: 1. **基础语法**:了解T-SQL的基本结构,...
在SQL Server 2005中,T-SQL得到了显著增强,其中一个重要方面是引入了新的数据类型。这些数据类型更加丰富且灵活,能够更好地支持现代应用程序的需求。例如: - **日期与时间**: SQL Server 2005引入了`DATE`, `...
### SQL Server 2005 T-SQL Recipes: A Problem-Solution Approach #### 简介 《SQL Server 2005 T-SQL Recipes: A Problem-Solution Approach》是一本针对SQL Server 2005数据库管理和开发的专业书籍。本书以实际...
该书解释并比较了sql server 2000和sql server 2005在数据库开发相关问题上的解决方案,深入讨论了sql server 2005中新增的t-sql编程特性,包含了大量的代码示例、表示例和逻辑难题以帮助数据库开发人员和管理员理解...
《SQL SERVER 2008 T-SQL基础》是一本由微软出版社出版的书籍,主要针对SQL Server 2008中的Transact-SQL(T-SQL)语言进行深入浅出的讲解。T-SQL是SQL Server的核心组件,用于数据查询、数据操纵、存储过程编写以及...
在SQL Server 2012中,T-SQL提供了一系列的关键功能和语法,包括但不限于: 1. **数据查询**:通过SELECT语句进行数据检索,可以使用WHERE子句过滤结果,GROUP BY和HAVING子句进行数据分组和条件筛选,以及ORDER BY...
在SQL Server 2005中,T-SQL得到了显著增强,提供了更高效、更灵活的编程能力。这本书将带你了解以下几个方面的内容: 1. **基础语法**:T-SQL的基础包括SELECT、INSERT、UPDATE和DELETE语句,用于数据查询和修改。...
《SQL Server 2005 T-SQL增强》是一本专为SQL Server 2005用户准备的技术指南,深入探讨了T-SQL(Transact-SQL)在该版本中的新特性和强化功能。T-SQL是SQL Server的核心查询语言,用于数据查询、更新、插入和删除等...
《Inside SQL 2005 T-SQL》是关于微软SQL Server 2005数据库管理系统中T-SQL(Transact-SQL)语言的一份详细技术文档,对于想要深入理解和掌握这一重要数据库语言的读者来说,无疑是一份极具价值的学习资料。...
该书解释并比较了SQL Server 2000和SQL Server 2005在数据库开发相关问题上的解决方案,深入讨论了SQL Server 2005中新增的T-SQL编程特性,包含了大量的代码示例、表示例和逻辑难题以帮助数据库开发人员和管理员理解...
- **详尽的代码示例**:书中包含了大量实际可行的T-SQL代码示例,这些示例覆盖了SQL Server 2005中常见的各种操作场景。 - **实用性与参考性**:本书不仅适合初学者学习T-SQL的基础知识,也适用于有经验的开发者作为...
《SQL2008技术内幕——T-SQL查询》是一本深入探讨Microsoft SQL Server 2008数据库管理系统中T-SQL...通过系统学习,读者不仅可以掌握T-SQL的基础知识,还能了解到SQL Server 2008的新特性及其在实际项目中的应用。
该书解释并比较了SQL Server 2000和SQL Server 2005在数据库开发相关问题上的解决方案,深入讨论了SQL Server 2005中新增的T-SQL编程特性,包含了大量的代码示例、表示例和逻辑难题以帮助数据库开发人员和管理员理解...
《Microsoft SQL Server 2005技术内幕:T-SQL查询》是一本深入探讨SQL Server 2005中T-SQL(Transact-SQL)查询的专著。T-SQL是微软数据库管理系统SQL Server的主要编程语言,用于执行数据查询、更新、插入和删除等...