我正在使用存储过程插入数据表,并在之前创建了类型表, 查询是我想找回已在此会话中插入的所有“ ProdID”。 对于单次插入,我可以获取范围标识,但是我想为最近的插入获取全部。
谢谢。
[dbo].[sp_Isert] (@dt_Product Product_Table READONLY, @ProdID int out)
AS
INSERT into tblProduct (Name,Batch,Qty,ExpDate)
SELECT Name, Batch, Qty, ExpDate
FROM @dt_Product;
set @ProdID = Scope_Identity( )
select Scope_Identity( ) ProdID
答案 0 :(得分:0)
请勿使用scope_identity()
,而应使用output
子句。
请注意,SQL Server不支持将表值参数作为out参数,这意味着从存储过程中返回记录集的唯一方法是使用output
子句(不进入表)或执行{{1 }}声明。
此外,请勿对存储过程使用select
前缀。
Microsoft在系统过程中使用此前缀,因此您可能会遇到名称冲突。
sp
我已经制作了一个示例脚本供您检查。当我在SQL Server实例上运行它时,我得到了预期的结果:
ALTER PROCEDURE [dbo].[stp_Isert] (@dt_Product Product_Table READONLY)
AS
INSERT into tblProduct (Name,Batch,Qty,ExpDate)
OUTPUT Inserted.Id -- This will return a recordset with the inserted ids to the calling application.
SELECT Name, Batch, Qty, ExpDate
FROM @dt_Product;