Sql server 使用SQL Server中PK自动递增的触发器更新/插入值
我正在处理我的第一个数据库,已经有问题了。我有几张桌子。其中一些将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
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
。