SQL Server OUTPUT句は、INSERT、UPDATE、またはDELETEステートメントの影響を受けた各行の値を返します。
Output句は、クエリの実行中に別のテーブルに挿入できるデータのコピーを返します。 この句は、監査目的でテーブル内のデータ変更を追跡するために最も一般的に使用されます。
この句は、監査目的でテーブル内のデータ変更を追跡するた
OUTPUT句以下に示すように、2つの仮想テーブルへのアクセス権を与えます。
- 新しい行を含む挿入(挿入または更新)
- 行の古いコピーを含む削除(挿入のために空)
OUTPUT句は、テーブル内のすべての列にアクセスできます。
構文
---- for insertINSERT INTO tablename OUTPUT inserted . *INTO @output_tablenameVALUES (col_value1 ,col_value2 ,..) ---for delete DELETE FROM tablenameOUTPUT deleted.* INTO @output_tablename WHERE Condition
CREATE TABLE dbo.Item (ItemId Int identity(1,1),ItemName Varchar(20),ItemPurchasedDate Datetime)
Insert文でOutput句を使用して
output句の結果をテーブルに挿入するには、まずoutput句の結果を格納するテーブル変数を宣言し、output caluse構文を使用して結果をテーブル変数に格納します。
挿入されたレコードにアクセスするには、Output句は新しい行を含む挿入された仮想テーブルを使用します。次の文では、Itemテーブルに1つのレコードを挿入し、output句を使用してそれらのレコードをテーブル変数@insert_logに格納します。
DECLARE @insert_log TABLE(ItemId Int, ItemName Varchar(20), ItemPurchasedDate Datetime )INSERT INTO dbo.Item OUTPUT inserted.ItemId, inserted.ItemName, inserted.ItemPurchasedDateINTO @insert_logVALUES ('Item1' , Getdate()) SELECT * FROM dbo.Item;SELECT * FROM @insert_log ;
次の文では、Itemテーブルに1つのレコードを挿入し、以下のようにoutput句を使用して、それらのレコードをテーブル変数@insert_logに格納します。
DECLARE @insert_log TABLE(ItemId Int, ItemName Varchar(20), ItemPurchasedDate Datetime )INSERT INTO dbo.Item OUTPUT inserted.ItemId, inserted.ItemName, inserted.ItemPurchasedDateINTO @insert_logVALUES ('Item1' , Getdate()) SELECT * FROM dbo.Item;SELECT * FROM @insert_log ;
Itemテーブルとテーブル変数の出力を確認できますが、itemテーブルに新しいレコードを挿入すると、itemidはinsert文の一部ではありません。 ただし、OUTPUT句のItemId列にアクセスすることはできます。更新されたレコードにアクセスするには、必要に応じてinsertまたはdeleted仮想テーブルwith output句を使用できます。 新しい値を更新する前の古い値にアクセスする場合は、deleted virtual tableを使用し、新しい更新された値にアクセスする場合は、inserted virtual table with Output句を使用できます。次の文では、ItemテーブルのItemName値を更新し、output句を使用してそれらのレコードの古い値をテーブル変数@update_logに格納します。古いレコードにアクセスしたいので、削除された仮想テーブルを使用します。
削除された仮想テーブルを使用します。
あなたが見ることができるように、ここでは次のように3つの出力があります
1:レコードを更新する前のテーブル出力です。
2:レコードを更新した後のテーブル出力です。
3:更新前の古いレコード値を保持するのは、テーブル変数によって返される出力です。新しいレコードにアクセスする場合は、deletedの代わりにinserted仮想テーブルを使用できます。
Output句With Delete Statement
次の文は、deleteクエリを使用して、ItemId=1のレコードをItemテーブルから削除し、削除されたレコードをoutput caluseを使用してテーブル変数に格納します。
削除されたレコードにアクセスするには、行の古いコピーを含む削除された仮想テーブルを使用します。あなたが見ることができるように、それが削除されたように、項目テーブルで利用可能なデータはありませんが、output句は、テーブル変数にレコードを削除した挿入@delete_log、…..P>
あなたのためにお勧めします
Sql Serverの一時テーブル
822合計ビュー、8今日のビュー