Reputation: 3202
Below the script does not work but only working if it inserting a single row.
The documentId should not be declared on first line but from the retrieve from DOCUMENTS
table.
I read about SCOPE_IDENTITY()
but not sure how to apply it.
[dbo].[DOCUMENTS].DOCUMENT_ID
is a primary key with auto increment int.
What is required is for every row inserted into DOCUMENTS
table, it automatically insert and add it to the last row and use the newly created DOCUMENT_ID
to populate @documentId
defined in two table below.
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
Upvotes: 0
Views: 89
Reputation: 396
Assuming that DOCUMENT_ID is an identity column you can use an output clause to get the new ID, for example:
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
Upvotes: 0
Reputation: 1172
First of all you cant insert auto increment column without setting its identity on
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
Upvotes: 0
Reputation: 2419
As you have Doucment_ID as primary key with auto increment value, you dont have to pass variable in your 1st Insert statement. I have made some correction in your insert statements, check out my answer.
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
Upvotes: 1