var附近的语法不正确

时间:2015-09-18 14:47:50

标签: sql-server tsql heidisql

我正在使用SQL Server上的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

我得到的错误:

  

'@userSex'附近的语法不正确

我在没有IF句子的情况下尝试过它,并且它有效,所以问题出在那里。但是我需要那个句子,因为第二个表中的'gender'字段是'char'类型。

2 个答案:

答案 0 :(得分:4)

您错过了SET

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

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

参考

SET @local_variable

  

将先前使用DECLARE @local_variable语句创建的指定局部变量设置为给定值。

     

SET {{@local_variable = expression}

答案 1 :(得分:2)

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

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