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

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

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

2024-08-31 00:53: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
91网在线免费观看| 国产在线播放不卡| 成人免费看片视频| 亚洲tv在线观看| 神马久久桃色视频| 国产精品a久久久久久| 欧美在线观看日本一区| 91精品国产91久久久久久最新| 中文字幕一区电影| 丝袜美腿亚洲一区二区| 国产午夜精品一区理论片飘花| 日韩av中文字幕在线| 欧美亚洲视频在线观看| 欧美疯狂xxxx大交乱88av| 欧美日韩免费区域视频在线观看| 日韩av在线最新| 精品日韩视频在线观看| 在线观看久久av| 国产婷婷色综合av蜜臀av| 国产视频久久久| 亚洲久久久久久久久久| 欧美在线影院在线视频| 8x海外华人永久免费日韩内陆视频| 色偷偷888欧美精品久久久| 精品视频在线播放免| 国产欧美日韩专区发布| 自拍偷拍亚洲一区| 日韩av电影院| 97精品一区二区三区| 亚洲免费视频观看| 国产精品欧美风情| 国产精品亚洲片夜色在线| 日韩成人中文字幕在线观看| 青青青国产精品一区二区| 国产日产亚洲精品| 国产成人精品在线播放| 国产精品爽黄69| 亚洲欧洲自拍偷拍| 亚洲片在线资源| 国产精品久久久久久久美男| 亚洲一级片在线看| 国产日韩欧美黄色| 日韩免费观看av| 性欧美长视频免费观看不卡| 成人高h视频在线| 日韩精品一区二区三区第95| 色吧影院999| 欧美黑人性生活视频| 成人性教育视频在线观看| 国产精品白丝av嫩草影院| 亚洲电影免费观看| 91国内揄拍国内精品对白| 九九热精品视频| 久久精品99无色码中文字幕| 欧美一级电影在线| 91牛牛免费视频| 亚洲欧洲在线播放| 国产精选久久久久久| 日本精品中文字幕| 国产99久久精品一区二区永久免费| 国产精自产拍久久久久久蜜| 一本色道久久综合狠狠躁篇的优点| 欧美电影免费观看高清| 久久久久久国产三级电影| 成人av.网址在线网站| 九九九热精品免费视频观看网站| 亚洲国产中文字幕久久网| 色噜噜久久综合伊人一本| 国产精品成人久久久久| 欧美诱惑福利视频| 欧美另类在线播放| 久久人人爽亚洲精品天堂| 欧美在线播放视频| 久久久亚洲网站| 91老司机精品视频| 国产亚洲欧洲高清| 国产免费一区二区三区在线观看| 亚洲欧美一区二区三区久久| 欧美中文在线字幕| 神马国产精品影院av| 国产成人精品日本亚洲专区61| 久久这里只有精品视频首页| 亚洲成人亚洲激情| 九九热精品视频| 国语自产精品视频在线看| 欧美日韩精品在线观看| 色婷婷成人综合| 亚洲系列中文字幕| 欧美日韩爱爱视频| 欧美日韩国产成人在线观看| 亚洲欧美激情一区| 亚洲另类激情图| 国产精品户外野外| 欧美放荡办公室videos4k| 中文字幕欧美日韩| 色www亚洲国产张柏芝| 性欧美xxxx交| 午夜精品www| 欧美成人中文字幕| 久久97久久97精品免视看| 欧美日韩国产成人高清视频| 久久久999精品免费| 黄色91在线观看| 亚洲经典中文字幕| 在线日韩av观看| 久久久久久久999| 国产不卡精品视男人的天堂| 国产精品高潮呻吟久久av野狼| 日韩免费高清在线观看| 深夜成人在线观看| 26uuu日韩精品一区二区| 欧美黄色免费网站| 日本精品久久中文字幕佐佐木| 久久国产视频网站| 久久亚洲国产成人| 国产精品免费久久久久影院| 尤物yw午夜国产精品视频| 2019亚洲日韩新视频| 97香蕉久久超级碰碰高清版| 91香蕉嫩草影院入口| 日韩欧美一区二区三区| 亚洲第一福利网站| 欧美另类高清videos| 中文字幕在线日韩| 久久av红桃一区二区小说| 亚洲成色777777女色窝| 成人字幕网zmw| 欧美黑人国产人伦爽爽爽| 性日韩欧美在线视频| 欧美精品激情blacked18| 在线播放日韩欧美| 秋霞成人午夜鲁丝一区二区三区| 91精品国产91久久久久福利| 欧美日韩国产成人在线观看| 插插插亚洲综合网| 国产精品久久久久久久久久免费| 日韩精品视频在线观看免费| 另类少妇人与禽zozz0性伦| 日韩有码在线播放| 欧美乱大交xxxxx| 国产91网红主播在线观看| 欧美激情精品久久久久久大尺度| 久久大大胆人体| 国产精品久久中文| 欧美丰满少妇xxxxx做受| 青青草精品毛片| 亚洲美女又黄又爽在线观看| 欧美激情videoshd| 在线视频欧美性高潮| 97视频在线观看播放| 国模gogo一区二区大胆私拍| 国产精品久久一| 亚洲视频axxx| 亚洲大胆人体视频| 日韩欧美在线播放| 久久久久久久一| 欧美日韩免费一区| 日本久久久久久久久久久| 色偷偷噜噜噜亚洲男人| 欧美色欧美亚洲高清在线视频| 亚洲视频在线播放| 日韩欧美在线视频日韩欧美在线视频| 国产精品久久久久久久久粉嫩av| 一区二区三区视频免费|