欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
SQL Server 2005中的T-SQL增強
 

豐富的數據類(lèi)型 Richer Data Types 

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

2、XML數據類(lèi)型
XML數據類(lèi)型允許用戶(hù)在SQL Server數據庫中保存XML片段或文檔。

錯誤處理 Error Handling

1、新的異常處理結構

2、可以捕獲和處理過(guò)去會(huì )導致批處理終止的錯誤
前提是這些錯誤不會(huì )導致連接中斷(通常是嚴重程度為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
  --創(chuàng )建工作表

  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‘)

--調用一個(gè)運行時(shí)錯誤
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構造,并調用一個(gè)運行時(shí)錯誤
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 ‘事務(wù)提交‘
  END TRY
  BEGIN CATCH
    ROLLBACK
     PRINT ‘事務(wù)回滾‘
        SELECT ERROR_NUMBER() AS ErrorNumber,
        ERROR_SEVERITY() AS ErrorSeverity,
        ERROR_STATE() as ErrorState,
        ERROR_MESSAGE() as ErrorMessage;
   END CATCH
GO

SELECT * FROM score
GO

快照隔離 Snapshot Isolation

1、寫(xiě)入程序不會(huì )阻礙讀取程序
2、Snapshot isolation must be enabled for DB
      ALTER DATABASE 數據庫 SET allow_snapshot_isolation ON
3、Snapshot isolation must be enabled for connection
      Set transaction isolation level snapshot
4、UPDATE transactions keep old versions of data in a linked list
5、新的隔離級別提供了以下優(yōu)點(diǎn):
  1) 提高了只讀應用程序的數據可用性
  2) 允許在OLTP環(huán)境中執行非阻止讀取操作
  3) 可對寫(xiě)入事務(wù)進(jìn)行自動(dòng)的強制沖突檢測
6、演示代碼
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‘)

--連接一

USE demo2
BEGIN 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 增強
可以指定一個(gè)數字表達式,以返回要通過(guò)查詢(xún)影響的行數或百分比,還可以根據情況使用變量或子查詢(xún)。
可以在DELETE、UPDATE和INSERT查詢(xún)中使用TOP選項。

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

OUTPUT

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

2、新的OUTPUT子局的語(yǔ)法為:
OUTPUT <dml_select_list> INTO @table_variable
可以通過(guò)引用插入的表或刪除的表來(lái)訪(fǎng)問(wèn)被修改的行的舊/新影象,其方式與訪(fǎng)問(wèn)觸發(fā)器類(lèi)似。在INSERT語(yǔ)句中,只能訪(fǎng)問(wèn)插入的表。在DELETE語(yǔ)句中,只能訪(fǎng)問(wèn)刪除的表。在UPDATE語(yǔ)句中,可以訪(fǎng)問(wèn)插入的表和刪除的表。

3、代碼演示
USE demo
GO
CREATE 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 tt
OUTPUT DELETED.id, DELETED.c1 INTO @del
WHERE id < 3
SELECT * FROM @del
GO
-----------------------------------------------
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‘)

--聲明3個(gè)變量
DECLARE @a INT
DECLARE @b INT
DECLARE @c INT

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

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

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

--指出top
DELETE TOP(2) toptest where column1>‘t6‘

--更新top
UPDATE TOP(2) toptest SET column1 = ‘hi‘ where column1<=‘t2‘

SELECT * FROM toptest

排序函數 Ranking Functions

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

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

3、ROW_NUMBER
ROW_NUMBER是結果集的順序, 而不是數據庫中紀錄存放的原始順序
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

通用表表達式 Common Table Expressions 

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

視圖、派生表和CTE內部的查詢(xún)的一般形式

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

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

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

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

Recursive CTEs 遞歸的通用表表達式

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

--使用遞歸的通用表表達式
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
(
 -- 固定成員 (AM):
 -- SELECT查詢(xún)無(wú)需參考CarPartsCTE
 SELECT SubPart, Qty
 FROM CarParts
 WHERE Part = ‘Body‘
 UNION ALL
 -- 遞歸成員 (RM):
 -- SELECT查詢(xún)參考CarPartsCTE
 SELECT CarParts.SubPart, CarPartsCTE.Qty * CarParts.Qty
 FROM CarPartsCTE
 INNER JOIN CarParts ON CarPartsCTE.SubPart = CarParts.Part
 WHERE CarParts.CarID = 1
)
-- 外部查詢(xún)
SELECT SubPart, SUM(Qty) AS TotalNUM
FROM CarPartsCTE
GROUP BY SubPart  

新的關(guān)系運算符 PIVOT/UNPIVOT/APPLY

1、PIVOT
PIVOT運算符將行旋轉為列,并且可能同時(shí)執行聚合。使用PIVOT運算符時(shí)要注意的重要一點(diǎn)是,需要為它提供一個(gè)查詢(xún)表達式,表達式使用視圖、派生表或者是CTE只返回所關(guān)注的列。

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

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

演示:

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) --使用SUM聚合數量列
FOR [Quarter] --PIVOT Quarter 列
IN (Q1, Q2, Q3, Q4)) --使用季節
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
FROM 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

--測試
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

DDL觸發(fā)器 DDL Triggers

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

在DDL觸發(fā)器內部,可以通過(guò)訪(fǎng)問(wèn)eventdata()函數獲得與激發(fā)該觸發(fā)器的事件有關(guān)的數據。該eventdata()函數返回有關(guān)事件的xml數據。

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

代碼演示:

USE demo
GO
CREATE TRIGGER prevent_drop_table ON DATABASE FOR DROP_TABLE
AS
RAISERROR(‘沒(méi)有刪除表的權限.‘, 10, 1)
PRINT ‘嘗試在數據庫‘ + DB_NAME() + ‘中刪除表.‘
PRINT CONVERT (nvarchar (1000),EventData())
ROLLBACK
GO
-- 測試
CREATE TABLE TestDROP(col1 INT)
GO
INSERT INTO TestDROP VALUES(1)

DROP TABLE testdrop

-- Server
CREATE TRIGGER audit_ddl_logins ON ALL SERVER
  FOR CREATE_LOGIN, ALTER_LOGIN, DROP_LOGIN
AS
PRINT ‘發(fā)生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增強功能提高了用戶(hù)在編寫(xiě)查詢(xún)時(shí)的表達能力,使用戶(hù)可以改善代碼的性能,并且擴充了錯誤處理能力。

SQL Server 2005 在Transaction-SQL上所做的改進(jìn)反映了其更好地滿(mǎn)足了ANSI-99 SQL規范的要求以及客戶(hù)的需求。

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

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
被技術(shù)總監罵了一年總結出的 4 個(gè)SQL密技
SQL Server 2005 Beta 2 Transact-SQL 增強功能(inclue排序函數)
Vb.net數據庫編程(05):SQlserver的存儲過(guò)程
sql 面試問(wèn)題
某外企SQL Server面試題
Group by的語(yǔ)法
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久