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()
时可能会失败。如果我注释掉触发器的主体就行了。
答案 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数据类型方法和/或空间索引操作的索引视图和/或索引一起使用。