Sql 将新创建的ID插入到两个表中
下面的脚本不起作用,但只有在插入单行时才起作用 documentId不应在第一行声明,而应在从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
文档中检索表中声明
我读过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?请查看此链接: