1

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()。如果我注释掉触发器的主体,它会起作用。

4

1 回答 1

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 数据类型方法和/或空间索引操作是否正确。

于 2015-09-15T18:53:06.013 回答