INSERT上的SQL Server触发器始终为ROLLED BACK

时间:2014-08-18 20:19:30

标签: sql sql-server tsql

我想创建一个不允许从USA通过客户端的触发器。

所以我的代码是:

CREATE TRIGGER location_tr 
ON t1 FOR INSERT, UPDATE
AS
BEGIN
    DECLARE @country VARCHAR(50)

    SET @country = (SELECT country FROM inserted);

    IF @country <> 'USA'
    BEGIN
        PRINT 'You cant add user out of USA!'

        ROLLBACK TRANSACTION
    END
    ELSE
        COMMIT TRANSACTION
END

现在,我无法在表格t1上执行任何UPDATEINSERT

我想我的COMMIT/ROLLBACK命令出错了。需要帮忙。感谢

1 个答案:

答案 0 :(得分:2)

第一个问题是您的触发器不支持多行。您应该使用EXISTS而不是设置变量的值。这些方面的东西。

CREATE TRIGGER location_tr ON t1
FOR INSERT, UPDATE AS
BEGIN
    IF EXISTS(select * from inserted where Country <> 'USA')
        BEGIN
            PRINT 'You cant add user out of USA!'
            ROLLBACK TRANSACTION
        END    
END