SQL Server EVENTDATA()无法使用MAC SQL Pro for SQL Server

时间:2015-09-15 18:44:19

标签: sql-server triggers logonserver

SQL Server EVENTDATA()无法使用MAC SQL Pro for SQL Server。我正在使用触发器来验证登录到SQL Server的用户的IP地址。这是我的触发器:

CREATE TRIGGER [trLogOnCheckIP] 
    ON ALL SERVER  WITH EXECUTE AS 'sa'  FOR LOGON 
AS
BEGIN
    DECLARE @IPAddress NVARCHAR(50)

    SET @IPAddress = EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]',
                                               'NVARCHAR(50)') ;

    IF @IPAddress IS NULL OR NOT EXISTS (SELECT IP 
                                         FROM master..ValidIPAddress 
                                         WHERE IP = @IPAddress)
    BEGIN
        -- If login is not a valid one, then undo login process
        ROLLBACK --Undo login process

        INSERT INTO master..RejectedLogIn (IP) VALUES (@IPAddress)
    END
END

我在RejectedLogIn中没有行,用户无法登录,导致触发错误。执行EVENTDATA()时可能会失败。如果我注释掉触发器的主体就行了。

1 个答案:

答案 0 :(得分:1)

我通过设置以下变量修复了问题:

SET 
          ANSI_NULLS, 
          QUOTED_IDENTIFIER, 
          CONCAT_NULL_YIELDS_NULL, 
          ANSI_WARNINGS, 
          ANSI_PADDING 
        ON;

在检查服务器日志后我意识到了这一点:

  

SELECT失败,因为以下SET选项的设置不正确:' CONCAT_NULL_YIELDS_NULL,ANSI_WARNINGS,ANSI_PADDING'。验证SET选项是否正确,以便与计算列和/或筛选索引和/或查询通知和/或XML数据类型方法和/或空间索引操作的索引视图和/或索引一起使用。