Sql server 使用SQL Server中PK自动递增的触发器更新/插入值

Sql server 使用SQL Server中PK自动递增的触发器更新/插入值,sql-server,triggers,sql-server-2012,Sql Server,Triggers,Sql Server 2012,我正在处理我的第一个数据库,已经有问题了。我有几张桌子。其中一些将PK设置为自动增量,另一些则设置为nvarchar()type 我已经创建了触发器,它可以更新或向单元格中插入值。当我手动为PF插入值时,此触发器工作,在我的示例中为nvarchar()值。它不适用于PK,PK设置为自动递增-int。我需要帮助创建触发器,这将为该类型的工作 触发器示例: ALTER TRIGGER [dbo].[Table_Name_trigger_update] ON [dbo].[Table_Name] AF

我正在处理我的第一个数据库,已经有问题了。我有几张桌子。其中一些将PK设置为自动增量,另一些则设置为
nvarchar()
type

我已经创建了触发器,它可以更新或向单元格中插入值。当我手动为PF插入值时,此触发器工作,在我的示例中为
nvarchar()
值。它不适用于PK,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\u USER
值。

实际上不需要此触发器。 尝试将其替换为以下默认约束:

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

ALTER TABLE Table_Name ADD DEFAULT (CURRENT_USER) FOR changed_user
GO

正如@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\u USER
倾向于返回
dbo
而不是真正的用户名。

不需要设置“auto increment”
INT-IDENTITY
列-SQL Server会自行处理。如果插入一条新记录,那么触发器不需要在插入
后触发吗?@NickyvV yes。我有两个触发器。一个用于更新(上触发器)和一个用于插入(几乎与上代码相同),我在这里只是粘贴了
update
触发器。最后,我认为这个触发器实际工作。当我在表中插入数据时,其中PK为
int
,创建的
用户和
当前日期不做任何更改。但是如果我刷新此表,我可以看到字段中填写的名称和日期。当我在PK为
nvarchar
的表中插入数据时,我可以立即看到
创建的\u使用
r和
current\u日期
值,但不在具有
int
PK的表中。这就是为什么我认为这个触发器不能正常工作。我建议使用更准确的
SUSER\u SNAME()
,而不是
CURRENT\u USER