亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

SQL SERVER 2005中全新的OUTPUT子句添加數據記錄詳解(理論篇)

2019-11-03 08:35:14
字體:
來源:轉載
供稿:網友
也許大家在數據庫開發的時候,會發現這樣一個現象:添加數據記錄后想查看其結果都必須通過select表達式來查詢實現。一定都要多此一舉才可以看到被添加的數據記錄嗎?答案是否定的。SQL SERVER 2005新提供的OUTPUT子句就幫您解決這個難題,它以比觸發器更簡潔的方式,在添加數據記錄的同時或者事后顯示所添加的數據記錄內容。下面是作者通過查找幫助文檔MSDN和章立民老師的《SQL Server 2005數據庫開發實戰》等資料后總結如下:

理論篇

OUTPUT子句返回受 INSERT、UPDATE 或 DELETE 語句影響的每行的信息,或者返回基于上述每行的表達式。這些結果可以返回到處理應用程序,以供在確認消息、存檔以及其他類似的應用程序要求中使用。此外,也可以將結果插入表或表變量。

用于:

DELETE

INSERT

UPDATE

Transact-SQL 語法約定

語法
  
<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 }

備注
OUTPUT <dml_select_list> 子句和 OUTPUT <dml_select_list> INTO { @table_variable | output_table } 子句可以在單個 INSERT、UPDATE 或 DELETE 語句中定義。

注意:  
除非另行指定,否則,對 OUTPUT 子句的引用將同時引用 OUTPUT 子句和 OUTPUT INTO 子句。  

OUTPUT 子句對于在 INSERT 或 UPDATE 操作之后檢索標識列或計算列的值可能非常有用。

當 <dml_select_list> 中包含計算列時,輸出表或表變量中的相應列并不是計算列。新列中的值是在執行該語句時計算出的值。

以下語句中不支持 OUTPUT 子句:

引用本地分區視圖、分布式分區視圖或遠程表的 DML 語句。
包含 EXECUTE 語句的 INSERT 語句。
不能將 OUTPUT INTO 子句插入視圖或行集函數。

無法保證將更改應用于表的順序與將行插入輸出表或表變量的順序相對應。

如果將參數或變量作為 UPDATE 語句的一部分進行了修改,則 OUTPUT 子句將始終返回語句執行之前的參數或變量的值而不是已修改的值。

在使用 WHERE CURRENT OF 語法通過游標定位的 UPDATE 或 DELETE 語句中,可以使用 OUTPUT。

觸發器
從 OUTPUT 中返回的列反映 INSERT、UPDATE 或 DELETE 語句完成之后但在觸發器執行之前的數據。

對于 INSTEAD OF 觸發器,即使沒有因為觸發器的操作而發生修改,也會如同實際執行 INSERT、UPDATE 或 DELETE 那樣生成返回的結果。如果在觸發器的主體內使用包含 OUTPUT 子句的語句,則必須使用表別名來引用觸發器 inserted 和 deleted 表,以免使用與 OUTPUT 關聯的 INSERTED 和 DELETED 表復制列引用。

如果指定了 OUTPUT 子句但未同時指定 INTO 關鍵字,則對于給定的 DML 操作,DML 操作的目標不能啟用對其定義的任何觸發器。例如,如果在 UPDATE 語句中定義了 OUTPUT 子句,則目標表不能具有任何啟用的 UPDATE 觸發器。

如果設置了 sp_configure 選項 disallow results from triggers,則從觸發器內調用語句時,不帶 INTO 子句的 OUTPUT 子句將導致該語句失敗。

數據類型
OUTPUT 子句支持下列大型對象數據類型:nvarchar(max)、varchar(max)、varbinary(max)、 text、ntext、image 和 xml。當在 UPDATE 語句中使用 .WRITE 子句修改 nvarchar(max)、varchar(max) 或 varbinary(max) 列時,如果引用了值的全部前像和后像,則將其返回。在 OUTPUT 子句中,TEXTPTR( ) 函數不能作為 text、ntext 或 image 列的表達式的一部分出現。

隊列
可以在將表用作隊列或將表用于保持中間結果集的應用程序中使用 OUTPUT。換句話說,應用程序不斷地在表中添加或刪除行。以下示例在 DELETE 語句中使用 OUTPUT 子句將已刪除的行返回到執行調用的應用程序。

  復制代碼
USE AdventureWorks;
GO
DELETE TOP(1) dbo.DatabaseLog WITH (READPAST)
OUTPUT deleted.*
WHERE DatabaseLogID = 7;
GO


此示例從用作隊列的表中刪除一行,并使用單個操作將已刪除的值返回到處理應用程序。還可實現其他語義,例如使用表來實現堆棧。但是,SQL Server 并不保證由使用 OUTPUT 子句的 DML 語句處理和返回行的順序。應用程序負責包括可保證所需語義的適當 WHERE 子句,或者理解當針對 DML 操作可能限定多行時,沒有保證的順序。以下示例使用子查詢,并假定 DatabaseLogID 列具有唯一性特征才能實現所需的排序語義。

  復制代碼
USE AdventureWorks;
GO
DELETE dbo.DatabaseLog
OUTPUT deleted.*
WHERE DatabaseLogID IN (SELECT TOP(5) DatabaseLogID FROM dbo.DatabaseLog ORDER BY PostTime);
GO


注意:  
如果您的方案允許多個應用程序從一個表中執行析構性讀取,請在 UPDATE 和 DELETE 語句中使用 READPAST 表提示。這可防止在其他應用程序已經讀取表中第一個限定記錄的情況下出現鎖定問題。  

參數
@table_variable
指定一個 table 變量,返回的行將插入該變量中而不是返回到調用方。@table_variable 必須在 INSERT、UPDATE 或 DELETE 語句之前聲明。

如果未指定 column_list,則 table 變量必須與 OUTPUT 結果集具有相同的列數。標識列和計算列除外,這兩種列必須跳過。如果指定了 column_list,則任何省略的列都必須允許空值,或者都分配有默認值。

output_table
指定一個表,返回的行將被插入該表中而不是返回到調用方。output_table 可以為臨時表。

如果未指定 column_list,則表必須與 OUTPUT 結果集具有相同的列數。標識列和計算列例外,必須跳過這兩種列。如果指定了 column_list,則任何省略的列都必須允許空值,或者都分配有默認值。

output_table 無法應用于以下情況:

具有啟用的對其定義的觸發器。
參與到外鍵約束雙方的任意一方。
具有 CHECK 約束或啟用的規則。
column_list
INTO 子句目標表上列名的可選列表。它類似于 INSERT 語句中允許使用的列列表。

scalar_expression
可取計算結果為單個值的任何符號和運算符的組合。只要子查詢返回單個值,便可使用子查詢。scalar_expression 中不允許使用聚合函數。

對修改的表中的列的任何引用都必須使用 INSERTED 或 DELETED 前綴限定。

column_alias_identifier
用于引用列名的替代名稱。

DELETED
指定由更新或刪除操作刪除的值的列前綴。以 DELETED 為前綴的列反映 UPDATE 或 DELETE 語句完成之前的值。

不能在 INSERT 語句中同時使用 DELETED 與 OUTPUT 子句。

INSERTED
列的前綴,指定由插入操作或更新操作添加的值。以 INSERTED 為前綴的列反映 UPDATE 或 INSERT 語句完成之后但在觸發器執行之前的值。

INSERTED 語句不能與 DELETE 語句的 OUTPUT 子句同時使用。

from_table_name
列的前綴,指定 DELETE 語句或 UPDATE 語句(用于指定要更新或刪除的行)的 FROM 子句中所包含的表。

如果還在 FROM 子句中指定了要修改的表,則對該表中的列的任何引用都必須使用 INSERTED 或 DELETED 前綴限定。

*
指定受刪除、插入或更新操作影響的所有列都將按照它們在表中的順序返回。

例如,以下 DELETE 語句中的 OUTPUT DELETED.* 將返回 ShoppingCartItem 表中所有已刪除的列:

  復制代碼
DELETE Sales.ShoppingCartItem
    OUTPUT DELETED.*;

column_name
顯式列引用。任何對修改的表的引用都必須使用相應的 INSERTED 或 DELETED 前綴正確限定,例如:INSERTED.column_name。

權限
要求對通過 <dml_select_list> 檢索的任何列或者在 <scalar_expression> 中使用的任何列具有 SELECT 權限。

要求對 <output_table> 中指定的任何表具有 INSERT 權限。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产色视频一区| 亚洲国产精品va在看黑人| 欧美中文字幕在线视频| 欧美日韩成人在线播放| 91免费看视频.| 亚洲最大的网站| 国产精品欧美亚洲777777| 国产欧美一区二区三区视频| 久久久久久中文| 欧美剧在线观看| 亚洲欧美一区二区三区四区| 国产女人精品视频| 成人日韩av在线| 日韩精品在线免费观看视频| 欧美一区二区三区精品电影| 菠萝蜜影院一区二区免费| 日韩欧美成人精品| 成人激情综合网| 91精品久久久久久久久久| 国产视频精品在线| 欧美日韩美女视频| 在线国产精品播放| 欧美另类69精品久久久久9999| 国产精品一区二区三区在线播放| 亚洲高清av在线| 国产精品福利无圣光在线一区| 91香蕉国产在线观看| 欧美性感美女h网站在线观看免费| 亚洲精品自拍第一页| 亚洲影视九九影院在线观看| 国产视频精品免费播放| 亚洲午夜未满十八勿入免费观看全集| 亚洲国产免费av| 欧美成人黑人xx视频免费观看| 久久久999精品免费| 精品成人国产在线观看男人呻吟| 成人激情在线观看| 日韩精品在线观| 国产97在线视频| 久久激情五月丁香伊人| 欧美日韩中文字幕综合视频| 欧美韩国理论所午夜片917电影| 国产综合久久久久久| 中文一区二区视频| 亚洲人成在线一二| 亚洲а∨天堂久久精品喷水| 日韩av在线免费观看一区| 欧美成人剧情片在线观看| 国产精品网址在线| 亚洲欧美日韩国产成人| 欧美猛男性生活免费| 中文字幕精品久久| 亚洲免费伊人电影在线观看av| 日韩精品免费在线观看| 亚洲精品v天堂中文字幕| 91免费看国产| 亚洲精品一区久久久久久| 久久在线精品视频| 亚洲成人黄色网| 国产一区视频在线播放| 97色在线观看免费视频| 色婷婷成人综合| 日韩经典中文字幕| 欧美xxxx做受欧美.88| 中文字幕成人精品久久不卡| 在线精品国产成人综合| 色综合天天狠天天透天天伊人| www.久久久久久.com| 欧美在线亚洲在线| 欧美精品电影在线| 国产视频精品xxxx| 国产午夜精品全部视频播放| 色综合天天狠天天透天天伊人| 亚洲免费影视第一页| 国产精品白丝av嫩草影院| 日韩av在线免费看| 欧美激情日韩图片| 在线亚洲午夜片av大片| 国产69久久精品成人| 亚洲国产欧美一区二区三区久久| 亚洲福利视频专区| 97av在线播放| 国产精品久久久久久一区二区| 午夜精品在线观看| 日韩av资源在线播放| 亚洲精品国产精品国自产观看浪潮| 日本人成精品视频在线| 亚洲成色www8888| 7777精品视频| 永久555www成人免费| 亚洲а∨天堂久久精品9966| 精品久久久久久久久久久久久久| 日韩有码在线播放| 97久久久免费福利网址| 欧美天堂在线观看| 日本亚洲欧美三级| 日韩电影在线观看永久视频免费网站| 欧美视频中文在线看| 中文字幕亚洲二区| 成人黄色av网站| 在线精品国产成人综合| 亚洲欧美日韩中文在线| 久久91精品国产91久久久| 亚洲欧美激情精品一区二区| 欧美高清videos高潮hd| 九色精品美女在线| 中文字幕精品久久| 国产精品欧美亚洲777777| 亚洲第一区中文字幕| 亚洲乱亚洲乱妇无码| 最近中文字幕日韩精品| 97精品国产97久久久久久免费| 中文字幕在线看视频国产欧美在线看完整| 亚洲国产成人精品久久| www高清在线视频日韩欧美| 久久久亚洲精品视频| 久久久亚洲福利精品午夜| 精品少妇一区二区30p| 成人免费大片黄在线播放| 亚洲永久在线观看| 97av在线视频免费播放| 国产v综合v亚洲欧美久久| 欧美激情女人20p| 国产福利精品视频| 国产精品第一区| 亚洲一级黄色av| 91丨九色丨国产在线| 国产综合在线看| 日韩美女视频免费在线观看| 欧美一级bbbbb性bbbb喷潮片| 亚洲第一中文字幕| 国产日韩精品在线| 免费不卡在线观看av| 久久久久久久久久婷婷| 欧美黑人视频一区| 国产精品香蕉av| 国产日韩欧美视频在线| 国产精品69精品一区二区三区| 国产精品中文久久久久久久| 亚洲桃花岛网站| 亚洲欧美国产高清va在线播| 亚洲一区二区三区四区视频| 欧日韩在线观看| 最好看的2019年中文视频| 久色乳综合思思在线视频| 亚洲自拍高清视频网站| 国产日产久久高清欧美一区| 国产视频精品xxxx| 亚洲视频在线免费看| 成人在线免费观看视视频| 中文字幕亚洲激情| 国产精品成人一区二区三区吃奶| 91丝袜美腿美女视频网站| 国产精品女主播| 综合久久五月天| 国产精品v日韩精品| 亚洲图片欧美午夜| 51色欧美片视频在线观看| 亚洲第一精品福利| 国产97色在线|日韩| 亚洲福利影片在线| 精品少妇v888av| 欧美在线观看网址综合| 精品视频一区在线视频|