私は同じ必要があり、この答えを見つけました..
これにより、companyテーブル(comp)にレコードが作成され、companyテーブルで作成された自動IDを取得して、それをStaffテーブル(staff)にドロップし、2つのテーブルをリンクできるようにします。SQL 2008 DBで動作しますが、SQL 2005以降で動作するはずです。
===========================
CREATE PROCEDURE [dbo].[InsertNewCompanyAndStaffDetails]
@comp_name varchar(55) = 'Big Company',
@comp_regno nchar(8) = '12345678',
@comp_email nvarchar(50) = 'no1@home.com',
@recID INT OUTPUT
-' @recID'は、取得しようとしている会社の自動生成ID番号を保持するために使用されます
AS
Begin
SET NOCOUNT ON
DECLARE @tableVar TABLE (tempID INT)
-上記の行は、後で使用するために自動生成されたID番号を保持する一時テーブルを作成するために使用されます。それだけで一つのフィールド「tempID」を有し、そのタイプのINTが同じである「@recID」。
INSERT INTO comp(comp_name, comp_regno, comp_email)
OUTPUT inserted.comp_id INTO @tableVar
- ' OUTPUTを挿入します。上記の行は、現在作成中のレコードのフィールドからデータを取得するために使用されます。必要なこのデータはID自動番号です。テーブルの正しいフィールド名が表示されていることを確認してください。私のものは'comp_id'です。次に、これは前に作成した一時テーブルにドロップされます。
VALUES (@comp_name, @comp_regno, @comp_email)
SET @recID = (SELECT tempID FROM @tableVar)
-上記の行は、必要なIDが保存されている先に作成した一時テーブルを検索するために使用されます。この一時テーブルには1つのレコードと1つのフィールドしかないため、必要なID番号のみが選択され、 ' @recID 'にドロップされます。' @recID 'には、必要なID番号が付けられ、以下のように、好きなように使用できます。
INSERT INTO staff(Staff_comp_id)
VALUES (@recID)
End
-さあ、行きます。実際には、「挿入された OUTPUT.WhatEverFieldNameYouWant 」行で必要なものを取得し、テンポラリーテーブルに必要なフィールドを作成し、それにアクセスして、必要な方法を使用できます。
私はこのようなものを長い間探していましたが、この詳細な内訳で、これが役立つことを願っています。
OUTPUT INSERTED.ID
テーブルでアクティブなトリガーが発生した場合に問題が発生する可能性がある