如何使用存储过程插入数据表时获取范围标识列
我正在使用存储过程插入datatable并在之前创建了一个类型表,查询是我想要取回已在此会话中插入的所有’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
不要使用scope_identity()
– 而是使用output
子句。 请注意,SQL Server不支持将表值参数作为out参数,这意味着从存储过程返回记录集的唯一方法是使用output
子句(不是表)或执行select
语句。
另外,不要将sp
前缀用于存储过程。
Microsoft正在将此前缀用于系统过程,因此您可能会发生名称冲突。
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;
更新
我已经制作了一个示例脚本供您检查。 当我在我的SQL Server实例上运行它时,我得到了预期的结果:
CREATE TABLE tbl_TestOutputClause (Id int identity(1,1), Col int ); GO CREATE TYPE udt_TestOutputClauseIntegers AS TABLE (Value int); GO CREATE PROCEDURE stp_TestOutputClauseInsert (@Values dbo.udt_TestOutputClauseIntegers READONLY) AS INSERT INTO tbl_TestOutputClause(Col) OUTPUT INSERTED.Id SELECT Value FROM @Values; GO CREATE PROCEDURE stp_TestOutputClauseGetInsertedValues AS DECLARE @Ids AS TABLE (Id int); DECLARE @Vals dbo.udt_TestOutputClauseIntegers; INSERT INTO @Vals (Value) VALUES (1), (2), (3); INSERT INTO @Ids EXEC stp_TestOutputClauseInsert @Vals; -- should return three rows with the values 1, 2 and 3. SELECT * FROM @Ids; GO EXEC stp_TestOutputClauseGetInsertedValues; -- clean up DROP TABLE tbl_TestOutputClause; DROP PROCEDURE stp_TestOutputClauseInsert; DROP PROCEDURE stp_TestOutputClauseGetInsertedValues DROP TYPE udt_TestOutputClauseIntegers;
- HttpResponsefilter什么都不返回
- 如何在ASP.NET站点中添加favicon.ico
- Asp.Net Identity和多种登录机制
- 尝试写入事件日志时出错 – 无法打开源“SourceName”的日志。 您可能没有写访问权限
- 使用Max + 1创建用户友好的唯一序列号的替代方法
- 如何开发这个依赖于另一个ListView的ListView?
- 在ASP.Net Identity 2.0上包含属性UserManager.Users.ToListAsync和UserManager.FindByIdAsync
- N’在SQL脚本中代表什么? (在插入脚本中的字符之前使用的那个)
- 单击GridView查找所选行