Sql 将新创建的ID插入到两个表中

Sql 将新创建的ID插入到两个表中,sql,sql-server,insert,Sql,Sql Server,Insert,下面的脚本不起作用,但只有在插入单行时才起作用 documentId不应在第一行声明,而应在从文档中检索表中声明 我读过SCOPE\u IDENTITY(),但不知道如何应用它 [dbo].[DOCUMENTS].DOCUMENT\u ID是具有自动递增int的主键 所需的是,对于插入到文档表中的每一行,它会自动插入并将其添加到最后一行,并使用新创建的文档ID填充下面两个表中定义的@documentId declare @documentId int; set @documentId = (SE

下面的脚本不起作用,但只有在插入单行时才起作用

documentId不应在第一行声明,而应在从
文档中检索
表中声明

我读过
SCOPE\u IDENTITY()
,但不知道如何应用它

[dbo].[DOCUMENTS].DOCUMENT\u ID
是具有自动递增int的主键

所需的是,对于插入到
文档
表中的每一行,它会自动插入并将其添加到最后一行,并使用新创建的
文档ID
填充下面两个表中定义的
@documentId

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

由于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

首先,在未设置其标识的情况下,无法插入自动增量列

    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 @documentid=@@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

假设DOCUMENT_ID是一个identity列,您可以使用output子句获取新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

为什么要用自动增量传递主键列的值?对不起。SQL不是我的强项。该怎么做?@PareshJ我正在尝试生成一个新的Id,并在插入到两个表中时重用它。你确定这样做有效吗?我现在没有访问数据库的权限。我不认为这就是你使用SCOPE_IDENTITY()的方式。如果你不确定是否可以在谷歌上查看它。。对于语法。它将与我使用的相同。SCOPE_IDENTITY()如何指向新创建的文档\u ID?请查看此链接: