当前位置: 首页 > 编程语言 > C#

如何使用存储过程获取插入数据表时的范围标识列分享

时间:2023-04-10 15:41:31 C#

如何使用存储过程获取插入数据表时的范围标识列我正在使用存储过程插入一个数据表并在之前创建了一个类型表,查询是我想取回已插入此会话中的所有“ProdID”。对于单个插入,我可以获得范围ID,但我想获取所有最新的插入。提前致谢。[dbo].[sp_Isert](@dt_ProductProduct_TableREADONLY,@ProdIDintout)ASINSERTintotblProduct(Name,Batch,Qty,ExpDate)从@dt_Product中选择名称、批次、数量、ExpDate;set@ProdID=Scope_Identity()selectScope_Identity()ProdID不要使用scope_identity()——改用输出子句。请注意,SQLServer不支持表值参数作为输出参数,这意味着从存储过程返回记录集的唯一方法是使用输出子句(而非表)或执行选择语句。另外,不要对存储过程使用sp前缀。Microsoft将此前缀用于系统过程,因此您可能会遇到名称冲突。ALTERPROCEDURE[dbo].[stp_Isert](@dt_ProductProduct_TableREADONLY)ASINSERTintotblProduct(Name,Batch,Qty,ExpDate)OUTPUTInserted.Id——这会将带有插入ID的记录集返回给调用应用程序。从@dt_Product中选择名称、批次、数量、有效期;更新我已经制作了一个示例脚本供您检查。当我在我的SQLServer实例上运行它时,我得到了预期的结果:以上是C#学习教程:如何使用存储过程在插入数据表时获取范围标识列的全部内容,如果是对大家有用,需要了解更多C#学习教程,希望大家多多关注——CREATETABLEtbl_TestOutputClause(Idintidentity(1,1),Colint);GOCREATETYPEudt_TestOutputClauseIntegersASTABLE(Valueint);GOCREATEPROCEDUREstp_TestOutputClauseInsert(@Valuesdbo.udt_TestOutputClauseIntegersREADONLY)ASINSERTINTOtbl_TestOutputClause(Col)OUTPUTINSERTED.IdSELECTValueFROM@Values;GOCREATEPROCEDUREstp_TestOutputClauseGetInsertedValuesASDECLARE@IdsASTABLE(Idint);声明@Valsdbo.udt_TestOutputClauseIntegers;插入@Vals(值)值(1),(2),(3);插入@IdsEXECstp_TestOutputClauseInsert@Vals;--应返回值为1、2和3的三行。SELECT*FROM@Ids;执行stp_TestOutputClauseGetInsertedValues;--清除DROPTABLEtbl_TestOutputClause;删除程序stp_TestOutputClauseInsert;DROPPROCEDUREstp_TestOutputClauseGetInsertedValuesDROPTYPEudt_测试输出子句整数;本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: