使用触发器更新/插入值,其中SQL自动增量在SQL Server中

时间:2014-02-25 09:41:49

标签: sql-server triggers sql-server-2012

我正在使用我的第一个数据库并且已经出现问题。我有几张桌子。其中一些PK设置为自动增量,其他有nvarchar()类型。

我创建了触发器,它将值更新或插入单元格。当我手动为PF插入值时,此触发器有效,在我的情况下为nvarchar()值。它不适用于PK,其中设置为自动增量 - int。我需要帮助来创建适合该类型的触发器。

触发器示例:

ALTER TRIGGER [dbo].[Table_Name_trigger_update]
ON [dbo].[Table_Name]
AFTER UPDATE
AS
BEGIN
   UPDATE Table_Name
   SET
      changed_date = getdate()
    , changed_user  = CURRENT_USER
   FROM inserted AS ij
   WHERE ij.ID_name  = Table_Name.ID_name

   RETURN
END

因此,正如我之前所写,这项工作在nvarchar(),我手动插入PK。在这种情况下,触发器会更新表中的getdate()CURRENT_USER值。

2 个答案:

答案 0 :(得分:0)

您实际上不需要此触发器。 尝试用这些默认约束替换它:

ALTER TABLE Table_Name ADD DEFAULT (getdate()) FOR changed_date
GO

ALTER TABLE Table_Name ADD DEFAULT (CURRENT_USER) FOR changed_user
GO

答案 1 :(得分:0)

你可以在没有触发器的情况下解决这个问题,因为@GriGrim已经说过了。但我建议另一种解决方案:

ALTER TABLE Table_Name ADD DEFAULT (getdate()) FOR changed_date
GO

ALTER TABLE Table_Name ADD DEFAULT (SUSER_SNAME()) FOR changed_user
GO

您可以使用以下方法比较结果:

SELECT CURRENT_USER, SUSER_SNAME()

CURRENT_USER往往会返回dbo而不是真实的用户名。