我正在使用我的第一个数据库并且已经出现问题。我有几张桌子。其中一些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
值。
答案 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
而不是真实的用户名。