2017-05-26 11 views
0

以下はスクリプトが機能しませんが、単一の行を挿入する場合にのみ動作します。新しく作成されたIDを2つのテーブルに挿入する

documentIdは、1行目ではなく、DOCUMENTSから取得するテーブルから宣言する必要があります。

私は約SCOPE_IDENTITY()を読んでいますが、適用方法は不明です。

[dbo].[DOCUMENTS].DOCUMENT_IDは、自動インクリメントintの主キーです。必要とされるどのような

は、DOCUMENTSテーブルに行が挿入されるごとにあり、それを自動的に挿入し、最後の行に追加し、@documentIdは、下の2つのテーブルに定義された移入するために、新しく作成したDOCUMENT_IDを使用しています。

declare @documentId int; 
set @documentId = (SELECT MAX(DOCUMENT_ID) FROM dbo.DOCUMENTS)+ 1 

INSERT INTO [dbo].[DOCUMENTS] (
     DOCUMENT_ID 
     ,DOCUMENT_TYPE 
     ,DOCUMENT_REF 
     ,DOCUMENT_NOTE 
     ,DOCUMENT_DATE 
     ,LAST_UPDATE_ID 
     ,LAST_UPDATE_DATE 
     ,DOCUMENT_FUNCTION_CODE 
     ,BATCH_ID 
     ,AUDIT_XML 
     ,AUDIT_USER 
     ,REMINDER_DATE) 
    SELECT 
    @documentId, 
    NULL, 
    NULL, 
    'MIGRATED FROM BRING UP NOTES ' + CAST(GETDATE() AS VARCHAR(20)) + ' ' + sr.BRINGUP_NOTES, 
    GETDATE(), 
    NULL, 
    NULL, 
    NULL, 
    NULL, 
    NULL, 
    NULL, 
    sr.BRINGUP_DATE 
    FROM [dbo].[SERVICE_REQUESTS] sr 

----- Insert into another table ------------ 
INSERT INTO [dbo].[SERVICE_REQUEST_ITEM_DOCS] (
    [SERVICE_REQUEST_ID] 
     ,[SERVICE_REQUEST_ITEM_SEQNO] 
     ,[DOCUMENT_ID] 
     ,[LAST_UPDATE_ID] 
     ,[LAST_UPDATE_DATE] 
     ,[COVER_LETTER]) 
    SELECT 
    sr.SERVICE_REQUEST_ID, 
    1, 
    @documentId, 
    0, 
    GETDATE(), 
    0 
    FROM [dbo].[SERVICE_REQUESTS] sr 
+0

なぜ、自動増分でプライマリキー列の値を渡していますか? –

+0

申し訳ありません。 SQLは私の最強ではありません。どのようにそれを行う必要がありますか? – ove

+0

@PareshJ私は新しいIDを生成し、両方のテーブルに挿入するときに再利用しようとしています – ove

答えて

1

あなたが自動インクリメント値を持つ主キーとしてDoucment_IDてきたように、あなたはあなたの第一INSERT文で変数を渡すために持っていけません。私はあなたの挿入文でいくつかの修正を加え、私の答えをチェックアウトします。

declare @documentId int; 


INSERT INTO [dbo].[DOCUMENTS] (
     DOCUMENT_TYPE 
     ,DOCUMENT_REF 
     ,DOCUMENT_NOTE 
     ,DOCUMENT_DATE 
     ,LAST_UPDATE_ID 
     ,LAST_UPDATE_DATE 
     ,DOCUMENT_FUNCTION_CODE 
     ,BATCH_ID 
     ,AUDIT_XML 
     ,AUDIT_USER 
     ,REMINDER_DATE) 
    SELECT 
    NULL, 
    NULL, 
    'MIGRATED FROM BRING UP NOTES ' + CAST(GETDATE() AS VARCHAR(20)) + ' ' + sr.BRINGUP_NOTES, 
    GETDATE(), 
    NULL, 
    NULL, 
    NULL, 
    NULL, 
    NULL, 
    NULL, 
    sr.BRINGUP_DATE 
    FROM [dbo].[SERVICE_REQUESTS] sr 

Set @documentId = SCOPE_IDENTITY() 

----- Insert into another table ------------ 
INSERT INTO [dbo].[SERVICE_REQUEST_ITEM_DOCS] (
    [SERVICE_REQUEST_ID] 
     ,[SERVICE_REQUEST_ITEM_SEQNO] 
     ,[DOCUMENT_ID] 
     ,[LAST_UPDATE_ID] 
     ,[LAST_UPDATE_DATE] 
     ,[COVER_LETTER]) 
    SELECT 
    sr.SERVICE_REQUEST_ID, 
    1, 
    @documentId, 
    0, 
    GETDATE(), 
    0 
    FROM [dbo].[SERVICE_REQUESTS] sr 
+0

あなたは確かにこの作品ですか?私は今データベースにアクセスできません。 – ove

+0

これはSCOPE_IDENTITY()を使用する方法とは思わない – ove

+0

GOOGLE ..で構文をチェックアウトすることが不確かな場合はうまくいきます。それは私が使ったのと同じです。 –

0

あなたはDOCUMENT_IDは、あなたがたとえば、新しいIDを取得するには、出力句を使用することができ、ID列であると仮定すると

declare @documentId int; 
    --set @documentId = (SELECT MAX(DOCUMENT_ID) FROM dbo.DOCUMENTS)+ 1 

    INSERT INTO [dbo].[DOCUMENTS] (DOCUMENT_TYPE  ,DOCUMENT_REF  ,DOCUMENT_NOTE  ,DOCUMENT_DATE  ,LAST_UPDATE_ID  ,LAST_UPDATE_DATE  ,DOCUMENT_FUNCTION_CODE  ,BATCH_ID  ,AUDIT_XML  ,AUDIT_USER  ,REMINDER_DATE) 
     SELECT  NULL,  NULL,  'MIGRATED FROM BRING UP NOTES ' + CAST(GETDATE() AS VARCHAR(20)) + ' ' + sr.BRINGUP_NOTES,  GETDATE(),  NULL,  NULL,  NULL,  NULL,  NULL,  NULL,  sr.BRINGUP_DATE 
     FROM [dbo].[SERVICE_REQUESTS] sr 

    set @[email protected]@identity() 

--or  set @documentid=SCOPE_Identity() 


    ----- Insert into another table ------------ 
    INSERT INTO [dbo].[SERVICE_REQUEST_ITEM_DOCS] (
     [SERVICE_REQUEST_ID] 
      ,[SERVICE_REQUEST_ITEM_SEQNO] 
      ,[DOCUMENT_ID] 
      ,[LAST_UPDATE_ID] 
      ,[LAST_UPDATE_DATE] 
      ,[COVER_LETTER]) 
     SELECT 
     sr.SERVICE_REQUEST_ID, 
     1, 
     @documentId, 
     0, 
     GETDATE(), 
     0 
     FROM [dbo].[SERVICE_REQUESTS] sr 
0

にそのIDを設定せずに、自動インクリメント列を挿入カントまず第一に:

DECLARE @DOCUMENT_ID int 
DECLARE @TID TABLE (DOCUMENT_ID int) 

INSERT INTO SERVICE_REQUEST_ITEM_DOCS (Col1, Col2, Col3) 
    OUTPUT inserted.DOCUMENT_ID INTO @TID(DOCUMENT_ID) 
    VALUES ('val1', 'val2', 'val3') 

SELECT @DOCUMENT_ID = DOCUMENT_ID FROM @TID 
関連する問題