SqlSkull

SQL Server OUTPUT句は、INSERT、UPDATE、またはDELETEステートメントの影響を受けた各行の値を返します。

Output句は、クエリの実行中に別のテーブルに挿入できるデータのコピーを返します。 この句は、監査目的でテーブル内のデータ変更を追跡するために最も一般的に使用されます。

この句は、監査目的でテーブル内のデータ変更を追跡するた

OUTPUT句以下に示すように、2つの仮想テーブルへのアクセス権を与えます。

  1. 新しい行を含む挿入(挿入または更新)
  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 
例を見てみましょう、最初にItemという名前のテーブルを作成します。
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今日のビュー

Related Posts

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です