Trying to insert record in Parent table and return value of that rows IDENTITY, to pass back to app for use inserting child rows into other table. Looks clean against tutorial samples(http://aspnet.4guysfromrolla.com/demos/printPage.aspx?path=/articles/050207-1.aspx). Works with Insert until *** lines are added - HELP?
ERROR:
Msg 201, Level 16, State 4, Procedure qc_submitInsertQCparentReturningID_2, Line 0
Procedure or function 'qc_submitInsertQCparentReturningID_2' expects parameter '@.newQCparent_ID', which was not supplied.
Based on this Procedure:
ALTER PROCEDURE qc_submitInsertQCparentReturningID_2
(@.newQCparent_ID INT OUTPUT) ***
AS
-- Insert New QCparent RETURNING qcParentID
INSERT INTO app.dbo.a1_qcParent
([rowCreatedBy]
,[rowNotes]
,[rowLastAction]
,[rowLastActionBy]
,[rowLastActionNote])
-- Using Parameter Variables
VALUES('Anonymous Submit'
,'By qc_submitInsertQCparentReturningID'
,'Insert'
,'Guest'
,'show donald')
-- Read the qcParient_ID back for Items2fix Insert
SET @.newQCparent_ID = SCOPE_IDENTITY() ***
- Try New SPROC
EXEC qc_submitInsertQCparentReturningID_2
Thanks, unfortunately neither worked...
snippet 1 Error (EXEC qc_submitInsertQCparentReturningID_2 @.newQCparent_ID=@.newQCparent_ID):
Msg 137, Level 15, State 2, Line 1
Must declare the scalar variable "@.newQCparent_ID".
snippet 2 Error (EXEC qc_submitInsertQCparentReturningID_2 @.newQCparent_ID=scope_identity())
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ')'.
|||Sorry, I got it wrong; Leave your original procedure code as it was. Change your call of the stored procedure from
Code Snippet
EXEC qc_submitInsertQCparentReturningID_2to
Code Snippet
declare @.outputParm integer
EXEC qc_submitInsertQCparentReturningID_2 @.newQCparent_ID=@.outputParm output
and if you wish to see the results something like:
Code Snippet
declare @.outputParm integer
EXEC qc_submitInsertQCparentReturningID_2 @.newQCparent_ID=@.outputParm output
select @.outputParm as [@.outputParm]
|||Parameters are by default NULLable in SQL Server. But in case of OUTPUT parameters, you will have to always pass a value. So if you want to ignore the output value you can do:
exec qc_submitInsertQCparentReturningID_2 NULL;
If you need to retrieve the output value then do:
declare @.id int;
exec qc_submitInsertQCparentReturningID_2 @.id OUTPUT;
|||
THat allowed it to run, insert was successful, but the following resulted in 9 as scope_Identity but 14 rows listed:
- Try New SPROC
declare @.id int;
exec qc_submitInsertQCparentReturningID_4 @.id OUTPUT;
go
Select SCOPE_IDENTITY()
go
Select * from a1_qcParent
a) I was expecting to see the same scope as the last inserted rows ID (14) ?
and
b) can I use the @.id to populate another procedure insert ?
|||Removed the GO between statements, but Scope_Identity remained 9 while rows increased|||In the statement:
Code Snippet
declare @.id int;
exec qc_submitInsertQCparentReturningID_4 @.id OUTPUT;
go
Select SCOPE_IDENTITY()
go
Select * from a1_qcParent
The SCOPE_IDENTITY() function will not work as you are thinking -- because the IDENTITY column is assigned inside of the stored procedure and what happened there is NOT in the scope of the CALLING query. As I said above, you will need to do something like
Code Snippet
declare @.id int;
exec qc_submitInsertQCparentReturningID_4 @.id OUTPUT;
Select @.id
Select * from a1_qcParent
No comments:
Post a Comment