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