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
我正在 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