var 附近的语法不正确

Incorrect syntax near a var

我正在 SQL 服务器上与 HeidiSQL 合作,尝试创建插入后触发器,这是代码。

CREATE TRIGGER TR_After_Insert_User ON User1 AFTER INSERT
AS
BEGIN
    declare @userName varchar(24)
    declare @userLName varchar(20)
    declare @userSex varchar(10)

    select @userName = i.name from inserted i
    select @user1LName = i.lastname from inserted i
    select @userSex = i.gender from inserted i

    IF @userSex = 'Male'
       @userSex = 'M'
    ELSE
        @userSex = 'F'

    INSERT INTO db2.dbo.user2(name, lastname, gender) 
    VALUES (@legajoName, @legajoName, @legajoSexo)
END

我得到的错误:

Incorrect syntax near '@userSex'

我试过不加if语句,可以,所以问题就出在这里。但我需要那句话,因为来自第二个 table 的 'gender' 字段是 'char' 类型。

您错过了 SET:

IF @userSex = 'Male'
   SET @userSex = 'M'
ELSE
   SET @userSex = 'F'

在 SQL 中,这是为变量赋值的无效语法:@userSex = 'M'.

参考

SET @local_variable

Sets the specified local variable, previously created with the DECLARE @local_variable statement, to the given value.

SET { { @local_variable = expression }

您的触发器存在重大逻辑缺陷。它假定只会插入一行。这是一个常见但主要的问题。在 sql 服务器触发器每次操作触发一次,而不是每行一次。您可以将整个触发器更改为基于单个集合的插入并删除所有这些标量变量。

CREATE TRIGGER TR_After_Insert_User ON User1 AFTER INSERT
AS
BEGIN
    INSERT INTO db2.dbo.user2(name,lastname,gender) 
    select name, lastname, left(gender, 1) --or you could use a case expression here
    from inserted
END