我的插入程序正常工作,我想要的方式。但更新不适用于范围标识。
SET ANSI_NULLS ON
ALTER PROCEDURE [dbo].[spr_unitCreation]
(
@Unit_Name VARCHAR(50) = NULL,
@Unit_Abbreviation VARCHAR(50) = NULL,
@Unit_type VARCHAR(50) = NULL,
@Decimal_Places VARCHAR(50) = NULL,
@Description VARCHAR(50) = NULL,
@Super_Unit VARCHAR(50) = NULL,
@Per_Unit VARCHAR(50) = NULL,
@unit_Id INT OUTPUT,
@abc VARCHAR(50) = NULL
)
AS
BEGIN
IF @abc = 'update' BEGIN
SET NOCOUNT ON;
SELECT @unit_Id AS SCOPE_IDENTITY
UPDATE tbl_UnitCreation
SET Unit_Name = @Unit_Name,
Unit_Abbreviation = @Unit_Abbreviation,
Unit_type = @Unit_type,
Decimal_Places = @Decimal_Places,
Description = @Description,
Super_Unit = @Super_Unit,
Per_Unit = @Per_Unit
WHERE unit_Id = @unit_Id
END
END
SELECT * FROM tbl_UnitCreation
答案 0 :(得分:0)
SCOPE_IDENTITY返回插入标识列的最后一个标识值。你没有插入一行。
要更新行,您只需要在执行[spr_unitCreation]时将值传递给@unit_Id。同时删除行" SELECT @unit_Id AS SCOPE_IDENTITY"来自你的代码。
根据评论,您需要通过搜索相关详细信息找到正确的ID。所以你可以得到这样的id:
SELECT @unit_Id = unit_Id
FROM tbl_UnitCreation
WHERE Unit_Name=@Unit_Name -- NB: Ensure this column contains your relevant details
答案 1 :(得分:0)
另一个常用选项是使用UPDATE语句的OUTPUT子句,将所有更新的/“插入的”主键和Unit_name插入到表变量中。
https://docs.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql?view=sql-server-2017