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

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

SQL Server 2005中的T-SQL增強

瀏覽:255日期:2023-10-30 08:14:12

豐富的數據類型 Richer Data Types

1、varchar(max)、nvarchar(max)和varbinary(max)數據類型最多可以保存2GB的數據,可以取代text、ntext或image數據類型。CREATE TABLE myTable( id INT, content VARCHAR(MAX))

2、XML數據類型XML數據類型允許用戶在SQL Server數據庫中保存XML片段或文檔。

錯誤處理 Error Handling

1、新的異常處理結構

2、可以捕獲和處理過去會導致批處理終止的錯誤前提是這些錯誤不會導致連接中斷(通常是嚴重程度為21以上的錯誤,例如,表或數據庫完整性可疑、硬件錯誤等等。)。

3、TRY/CATCH 構造SET XACT_ABORT ON BEGIN TRY <core logic> END TRY BEGIN CATCH TRAN_ABORT <exception handling logic> END TRY

@@error may be quired as first statement in CATCH block

4、演示代碼USE demo GO --創建工作表

CREATE TABLE student ( stuid INT NOT NULL PRIMARY KEY, stuname VARCHAR(50) )

CREATE TABLE score ( stuid INT NOT NULL REFERENCES student(stuid), score INT )GO

INSERT INTO student VALUES (101,'zhangsan') INSERT INTO student VALUES (102,'wangwu') INSERT INTO student VALUES (103,'lishi') INSERT INTO student VALUES (104,'maliu')

--調用一個運行時錯誤SET XACT_ABORT OFF BEGIN TRAN INSERT INTO score VALUES (101,90) INSERT INTO score VALUES (102,78) INSERT INTO score VALUES (107, 76) /* 外鍵錯誤 */ INSERT INTO score VALUES (103,81) INSERT INTO score VALUES (104,65) COMMIT TRAN GO

SELECT * FROM student SELECT * FROM score

--使用TRY...CATCH構造,并調用一個運行時錯誤SET XACT_ABORT OFF BEGIN TRY BEGIN TRAN INSERT INTO score VALUES (101,90) INSERT INTO score VALUES (102,78) INSERT INTO score VALUES (107, 76) /* 外鍵錯誤 */ INSERT INTO score VALUES (103,81) INSERT INTO score VALUES (104,65) COMMIT TRAN PRINT '事務提交' END TRY BEGIN CATCH ROLLBACK PRINT '事務回滾' SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() as ErrorState, ERROR_MESSAGE() as ErrorMessage; END CATCHGO

SELECT * FROM scoreGO

快照隔離 Snapshot Isolation

1、寫入程序不會阻礙讀取程序2、Snapshot isolation must be enabled for DB ALTER DATABASE 數據庫 SET allow_snapshot_isolation ON3、Snapshot isolation must be enabled for connection Set transaction isolation level snapshot4、UPDATE transactions keep old versions of data in a linked list5、新的隔離級別提供了以下優點:  1) 提高了只讀應用程序的數據可用性  2) 允許在OLTP環境中執行非阻止讀取操作  3) 可對寫入事務進行自動的強制沖突檢測6、演示代碼CREATE DATABASE demo2GOUSE 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')

--連接一

USE demo2BEGIN TRAN UPDATE test SET tname='version3' WHERE tid=2 SELECT * FROM test

--連接二USE demo2 SET transaction isolation level snapshot SELECT * FROM test

TOP 增強功能

1、TOP 增強可以指定一個數字表達式,以返回要通過查詢影響的行數或百分比,還可以根據情況使用變量或子查詢。可以在DELETE、UPDATE和INSERT查詢中使用TOP選項。

2、更好地替換SET ROWCOUNT選項,使之更為有效。

OUTPUT

1、SQL Server 2005引入一個新的OUTPUT子句,以使您可以沖修改語句(INSERT、UPDATE、DELETE)中將數據返回到表變量中。

2、新的OUTPUT子局的語法為:OUTPUT <dml_select_list> INTO @table_variable可以通過引用插入的表或刪除的表來訪問被修改的行的舊/新影象,其方式與訪問觸發器類似。在INSERT語句中,只能訪問插入的表。在DELETE語句中,只能訪問刪除的表。在UPDATE語句中,可以訪問插入的表和刪除的表。

3、代碼演示USE demoGOCREATE TABLE tt ( id INT IDENTITY, c1 VARCHAR(15))GO

INSERT INTO tt VALUES ('r1')INSERT INTO tt VALUES ('r2')INSERT INTO tt VALUES ('r5')INSERT INTO tt VALUES ('r6')INSERT INTO tt VALUES ('r7')INSERT INTO tt VALUES ('r8')INSERT INTO tt VALUES ('r9')INSERT INTO tt VALUES ('r10')

DECLARE @del AS TABLE (deletedId INT, deletedValue VARCHAR(15))DELETE ttOUTPUT DELETED.id, DELETED.c1 INTO @delWHERE id < 3SELECT * FROM @delGO-----------------------------------------------USE demoGOCREATE TABLE toptest (column1 VARCHAR(150))GOINSERT 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 toptestGO

CREATE TABLE toptest2 (column2 VARCHAR(150))GOINSERT INTO toptest2 VALUES('c1')INSERT INTO toptest2 VALUES('c2')

--聲明3個變量DECLARE @a INTDECLARE @b INTDECLARE @c INT

--賦值SET @a = 10SET @b = 5SELECT @c = @a/@b

--使用計算表達式SELECT TOP(@c) * FROM toptest

--使用SELECT語句作為條件SELECT TOP(SELECT COUNT(*) FROM toptest2) * FROM toptest

--指出topDELETE TOP(2) toptest where column1>'t6'

--更新topUPDATE TOP(2) toptest SET column1 = 'hi' where column1<='t2'

SELECT * FROM toptest

排序函數 Ranking Functions

1、SQL Server引入幾個新的排序函數:如ROW_NUMBER、RANK、DENSE_RANK等。這些新函數使您可以有效地分析數據以及向查詢的結果行提供排序值。

2、排序函數都遵循類似的語法模式:()OVER([PARTITION BY]ORDER BY)該函數只能在查詢的兩個子句中指定 - 在SELECT子句或ORDER BY子句中。以下詳細討論不同的函數。;

3、ROW_NUMBERROW_NUMBER是結果集的順序, 而不是數據庫中紀錄存放的原始順序USE demoGOCREATE TABLE rankorder(orderid INT,qty INT)GOINSERT 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)GOSELECT 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 rankorderORDER BY qty

通用表表達式 Common Table Expressions;

通用表表達式(CTE)是一個可以由定義語句引用的臨時表命名的結果集。在他們的簡單形式中,您可以將CTE視為類似于視圖和派生表混合功能的改進版本。在查詢的FROM子句中引用CTE的方式類似于引用派生表和視圖的方式。只須定義CTE一次,即可在查詢中多次引用它。在CTE的定義中,可以引用在同一批處理中定義的變量。但是CTE的真正威力在于它們的遞歸功能,即CTE可以包含對它們自身的引用。

視圖、派生表和CTE內部的查詢的一般形式

1、視圖CREATE VIEW <view_name>(<column_aliases>) AS <view_query>

2、派生表SELECT * FROM (<derived_table)query>) AS <dericed_table_alias>(<column_aliases>)

3、CTEWITH <cte_alias>(<column_aliases>)AS{<cte_query>)SELECT * FROM <cte_alias]>在關鍵字WITH之后,為CTE提供一個別名,并且為它的結果列提供一個可選的別名列表;編寫CTE的主體;然后從外部查詢中引用它。

4、演示代碼USE AdventureWorksGOWITH SalesCTE(ProductID, SalesOrderID)AS (SELECT ProductID, COUNT(SalesOrderID) FROM Sales.SalesOrderDetail GROUP BY ProductID)SELECT * FROM SalesCTE

Recursive CTEs 遞歸的通用表表達式

遞歸的CTE是根據至少兩個查詢(或者稱為兩個成員)構建的,一個是非遞歸查詢,也成為固定成員,只能調用一次,另外一個是遞歸查詢,也成為遞歸成員(RM),可以反復調用,直到查詢不再返回行。查詢由UNION ALL運算符連接為一個單獨的CTE。

--使用遞歸的通用表表達式USE demoGOCREATE TABLE CarParts(CarID INT NOT NULL,Part VARCHAR(15),SubPart VARCHAR(15),Qty INT)GOINSERT 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)GOSELECT * FROM CarPartsGO

WITH CarPartsCTE(SubPart, Qty) AS(-- 固定成員 (AM):-- SELECT查詢無需參考CarPartsCTESELECT SubPart, QtyFROM CarPartsWHERE Part = 'Body'UNION ALL-- 遞歸成員 (RM):-- SELECT查詢參考CarPartsCTESELECT CarParts.SubPart, CarPartsCTE.Qty * CarParts.QtyFROM CarPartsCTE INNER JOIN CarParts ON CarPartsCTE.SubPart = CarParts.PartWHERE CarParts.CarID = 1)-- 外部查詢SELECT SubPart, SUM(Qty) AS TotalNUMFROM CarPartsCTEGROUP BY SubPart

新的關系運算符 PIVOT/UNPIVOT/APPLY

1、PIVOTPIVOT運算符將行旋轉為列,并且可能同時執行聚合。使用PIVOT運算符時要注意的重要一點是,需要為它提供一個查詢表達式,表達式使用視圖、派生表或者是CTE只返回所關注的列。

2、UNPIVOTUNPIVOT運算符執行與PIVOT運算符相反的操作;他將列旋轉為行了。

3、APPLYAPPLY關系運算符允許您對外部表的每個行調用指定的表值函數一次。您可以在查詢的FROM子句中指定APPLY,其方式與使用JOIN關系運算符類似。APPLY具有兩種形式:CROSS APPLY和OUTER APPLY。

演示:

USE demoGO

CREATE TABLE orders(Customer VARCHAR(10) NOT NULL,product VARCHAR(20) NOT NULL,quantity INT NOT NULL)GOINSERT 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 ordersPIVOT (SUM(quantity) FOR product IN ([Bike],[Chain])) AS aUSE demoGOCREATE TABLE SALES1( [Year] INT, Quarter CHAR(2), Amount FLOAT)GOINSERT 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 SALES1PIVOT(SUM (Amount) --使用SUM聚合數量列FOR [Quarter] --PIVOT Quarter 列IN (Q1, Q2, Q3, Q4)) --使用季節AS PGO

SELECT * INTO temp1 FROM ordersPIVOT (sum(quantity) FOR product IN ([Bike],[Chain])) AS a

SELECT * FROM temp1

SELECT customer, product,quantityFROM temp1UNPIVOT(quantity FOR product IN ([Bike],[Chain])) AS a----------------------------------------------------USE demoGOCREATE TABLE Arrays( aid INT NOT NULL IDENTITY PRIMARY KEY, array VARCHAR(7999) NOT NULL)GOINSERT INTO Arrays VALUES('')INSERT INTO Arrays VALUES('10')INSERT INTO Arrays VALUES('20,40,30')INSERT INTO Arrays VALUES('-1,-3,-5')GOCREATE FUNCTION; function1(@arr AS VARCHAR(7999)) RETURNS @t TABLE(pos INT NOT NULL, value INT NOT NULL)ASBEGIN 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 RETURNEND

--測試SELECT * FROM function1('200,400,300')GO

SELECT A.aid, F.*FROM Arrays AS A CROSS APPLY function1(array) AS FGOSELECT A.aid, F.*FROM Arrays AS A OUTER APPLY function1(array) AS FGO

DDL觸發器 DDL Triggers

SQL Server 2005可以就整個服務器或數據庫的某個范圍為DDL事件定義觸發器。也可以為單個DDL語句(例如:CREAT_TABLE、DROP_TABLE等)或者為一組語句(例如:指定DDL_DATABASE_LEVEL_EVENTS想要觸發器觸發數據庫所有DDL事件)定義DDL觸發器。

在DDL觸發器內部,可以通過訪問eventdata()函數獲得與激發該觸發器的事件有關的數據。該eventdata()函數返回有關事件的xml數據。

DDL觸發器特別有用的方案包括DDL更改的完整性檢查、審核方案以及其他方案。

代碼演示:

USE demoGOCREATE TRIGGER prevent_drop_table ON DATABASE FOR DROP_TABLEASRAISERROR('沒有刪除表的權限.', 10, 1)PRINT '嘗試在數據庫' + DB_NAME() + '中刪除表.'PRINT CONVERT (nvarchar (1000),EventData())ROLLBACKGO-- 測試CREATE TABLE TestDROP(col1 INT)GOINSERT INTO TestDROP VALUES(1)

DROP TABLE testdrop

-- ServerCREATE TRIGGER audit_ddl_logins ON ALL SERVER FOR CREATE_LOGIN, ALTER_LOGIN, DROP_LOGINASPRINT '發生DDL LOGIN.'PRINT CONVERT (nvarchar (1000),EventData())GO

-- 測試CREATE LOGIN login1 WITH PASSWORD = '123'ALTER LOGIN login1 WITH PASSWORD = 'xyz'DROP LOGIN login1

總結

SQL Server 2005中的Transaction-SQL增強功能提高了用戶在編寫查詢時的表達能力,使用戶可以改善代碼的性能,并且擴充了錯誤處理能力。

SQL Server 2005 在Transaction-SQL上所做的改進反映了其更好地滿足了ANSI-99 SQL規范的要求以及客戶的需求。

在Transaction-SQL和托管代碼之間的選擇。

標簽: Sql Server 數據庫
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲欧美日韩国产综合精品二区 | 久久国内精品| 日本亚州欧洲精品不卡| 亚洲精品裸体| 麻豆91精品视频| 免费看久久久| 日韩欧美国产精品综合嫩v| 久久精品国产福利| 麻豆成全视频免费观看在线看| 高清不卡亚洲| 欧美日韩国产在线观看网站| 国产精品女主播一区二区三区| 亚洲乱亚洲高清| 美日韩一区二区三区| 天堂日韩电影| 丝袜亚洲另类欧美| 国产女人18毛片水真多18精品| 国产suv精品一区二区四区视频| 日韩欧美三级| 日韩专区欧美专区| 国产精品jk白丝蜜臀av小说| 日韩成人综合| 亚洲久久视频| 精品国产一区二区三区av片| 国产一区日韩欧美| 日韩av三区| 精品国产美女a久久9999| 国产91精品对白在线播放| 亚洲涩涩av| 国产中文在线播放| 黑丝一区二区| 久久国产欧美日韩精品| 成人va天堂| 亚洲18在线| 免费高潮视频95在线观看网站| 玖玖精品视频| 国内不卡的一区二区三区中文字幕| 国精品一区二区三区| 日韩三级精品| 秋霞影院一区二区三区| 欧美亚洲国产日韩| 亚洲午夜电影| 久久爱www.| 99国产精品自拍| 国产黄色精品| 性欧美精品高清| 国产精品久一| 水野朝阳av一区二区三区| а√在线中文在线新版| 日韩中出av| 不卡中文一二三区| 久久男人av| 日韩一区精品| 一区三区视频| 中文字幕人成乱码在线观看| 日韩欧美2区| 亚洲免费在线| 久久精品动漫| 日本久久黄色| 国产乱码精品一区二区三区亚洲人| 99热精品在线| 久久麻豆视频| 亚洲va久久久噜噜噜久久| 亚洲精品一区二区妖精| 黄色在线观看www| 国产欧美三级| 亚洲v天堂v手机在线| 欧美在线资源| 91精品精品| 97精品国产一区二区三区| 国产精品1区| 久久激五月天综合精品| 亚洲精品乱码日韩| 午夜一级在线看亚洲| 999国产精品视频| 黄色网一区二区| 国产欧美一区二区色老头| 免费看日韩精品| 国产精品美女久久久| 激情欧美一区二区三区| 亚洲a一区二区三区| 91精品一区二区三区综合| 亚洲1234区| 日韩精品首页| 久久高清免费| 欧美粗暴jizz性欧美20| 国产麻豆久久| 久久国产毛片| 999视频精品| 亚洲高清激情| 亚洲福利一区| 91精品蜜臀一区二区三区在线| 色黄视频在线观看| 麻豆精品蜜桃| 婷婷综合社区| 玖玖玖国产精品| 亚洲精品在线国产| 日韩中文字幕一区二区高清99| 日韩欧美三区| 国产欧美一区二区三区精品观看| 国产精品99久久免费| 国产在视频一区二区三区吞精| 国产一区二区三区不卡av| 中文在线资源| 免费成人网www| 视频一区中文字幕国产| 国产精品人人爽人人做我的可爱| 蜜臀va亚洲va欧美va天堂| 日本一区免费网站| 国产亚洲字幕| 国际精品欧美精品| 亚洲电影有码| 免费久久99精品国产自在现线| 亚洲毛片网站| 美腿丝袜亚洲一区| 亚洲精品**中文毛片| 免费国产自久久久久三四区久久| 在线视频日韩| 亚洲一区二区三区久久久| 日韩精品成人在线观看| 欧美激情麻豆| 日韩欧美精品综合| 视频一区视频二区在线观看| 97久久亚洲| 国产99在线| 夜夜嗨一区二区三区| 五月激激激综合网色播| 国产精品日韩精品中文字幕| 中文字幕高清在线播放| 亚洲一区激情| 国产精品久久久久久久久久妞妞| 日韩精品永久网址| 视频在线观看一区二区三区| 国产精品sm| 性欧美69xoxoxoxo| 青青国产91久久久久久| 精品视频久久| 欧美在线综合| 精品国产亚洲日本| 欧美日韩四区| 久久成人av| 红桃视频国产一区| 国产精品xxxav免费视频| 日韩精品免费一区二区在线观看| 一级欧美视频| 不卡福利视频| 欧美一区在线观看视频| 久久在线视频免费观看| 国产日韩一区二区三免费高清 | 国产高清日韩| 91精品精品| 久久不见久久见中文字幕免费| 精品一区免费| 欧美精品aa| 视频一区二区欧美| sm久久捆绑调教精品一区| 亚洲精品视频一二三区| 日本久久成人网| 国产精品一国产精品k频道56| 欧美日韩在线播放视频| 国产亚洲欧美日韩精品一区二区三区 | sm久久捆绑调教精品一区| 男人的天堂亚洲一区| 正在播放日韩精品| 欧美天堂在线| av一区二区高清| 成人一二三区| 国产亚洲欧美日韩精品一区二区三区 | 国产精品成人自拍| 亚洲我射av| 久久精品1区| 久久精品资源| 日本亚洲最大的色成网站www| 婷婷综合五月| 日韩在线观看一区| 国产亚洲精品美女久久| 视频一区视频二区中文字幕| 久久久久久久久久久9不雅视频| 久久久精品国产**网站| 亚洲欧美专区| 一本一道久久a久久精品蜜桃| 免费日韩成人| 91精品在线免费视频| 免费日本视频一区| 在线视频免费在线观看一区二区| 欧美日韩精品免费观看视欧美高清免费大片| 国产日韩1区| 日韩精品视频一区二区三区| 午夜一区在线| 国产精品美女久久久浪潮软件| 欧美日韩在线播放视频| 亚洲深夜视频| 日本激情一区| 日韩成人a**站| 麻豆精品久久久| 久久精品超碰| 免费精品国产| 一区在线视频观看| 午夜久久黄色| 99国产一区|