1
我试图在EquipmentStatKey从某些值更改为设置值时更新或连接一个变量,并在EquipmentStatKey和UserDef2发生更改时更改值。某些元组更新时运行的触发器
我对SQL很陌生,不确定自己做错了什么。它给我的错误代码是SQL80001和SQL46010,但我认为可能有更多的语法/逻辑错误。
GO
CREATE OR REPLACE TRIGGER equipStatTrig
AFTER UPDATE OF EquipmentStatKey ON dbo.Equipment
FOR EACH ROW
AS
DECLARE @statVar INT, @departmentVar INT, @receiveDateVar NVARCHAR (30), @shipDateVar NVARCHAR (30), @rentDateVar NVARCHAR (30), @sellDateVar NVARCHAR (30), @notesVar NTEXT
SELECT @statVar = EquipmentStatKey
SELECT @departmentVar = DeptOwnerKey
SELECT @receiveDateVar = UserDef1
SELECT @shipDateVar = UserDef2
SELECT @rentDateVar = UserDef3
SELECT @sellDateVar = UserDef6
SELECT @notesVar = Notes
/* execute if EquipmentStatKey changed from something to 6, 1, 8, or 32 */
IF @statVar = 06 OR @statVar = 01 OR @statVar = 08 OR @statVar = 32
BEGIN
/*should read as "[previous note] [status] [department] [date]" */
SET @notesVar += ' ' + @statVar + ' ' + @departmentVar + ' ' + CurrentDate
SELECT LEN(@notesVar) AS Notes
END
/* execute if EquipmentStatKey changed from something to 3 or 2 */
ELSE IF @statVar = 03 OR @statVar = 02
BEGIN
SET @shipDateVar = NULL
END
/* execute if EquipmentStatKey changed from something to 6 */
ELSE IF @statVar = 06
BEGIN
SET @shipDateVar = CurrentDate
SET @sellDateVar = CurrentDate
END
/* execute if EquipmentStatKey changed from something to 8 or 1, && UserDef2 changed */
ELSE IF @statVar = 08 OR @statVar = 01 AND :OLD.UserDef2 != :NEW.UserDef2
BEGIN
SET @rentDateVar = @shipDateVar
END
GO
欢迎来到Stack Overflow,@Joshua Gregory。你在使用SQL-Server吗?你打算标记而不是[windows-server-2016]?拥有准确的标签可以帮助这些主题中最有经验的用户找到您的问题。 – Degan
这绝对是假设在SQL服务器上,但是当我做它时,我可能会不小心引用了一些预言者......是的,我知道,总的新手移动。 :( –
SQL Server不支持ROW TRIGGERS(对于每一行),只有STATEMENT TRIGGERS。您的触发器需要处理INSERTED和DELTED虚拟表中的多行。请参见https://docs.microsoft.com/en-us/ SQL/T-SQL /语句/创建触发件的Transact-SQL –