none
SQLSERVER2008EXPRESSでは、ログオントリガでEVENTDATA関数は使えないのでしょうか。 RRS feed

  • 質問

  • SQLSERVERログオン時に、クライアントのIPアドレスを取得したいのですが、どうしてもNULLしか返ってきません。

    EXPREESでは、EVENTDATA関数はエラーが出ないが正常に使用はできないのでしょうか。

    ALTER TRIGGER block_ipaddress

    ON ALL SERVER WITH EXECUTE AS 'sa'

    FOR LOGON

    AS

    BEGIN

                DECLARE @capturedip NVARCHAR(15);

                SET @capturedip = (SELECT EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]', 'NVARCHAR(15)'));
    END

    上記内容をログオントリガで行っているのですがどうしてもNULLしか返ってきません。

    どなたか助言お願い致します。

    2012年2月21日 2:21

すべての返信

  • EVENTDATA() はきちんとデータを返していて、XQuery 式が間違っているだけではないでしょうか?

    XQuery.value について詳しくないのですが、私なら

    DECLARE @xml xml;
    
    SET @xml = EVENTDATA();
    
    SET @ip = select top1 @xml.query('/EVENT_INSTANCE/ClientHost/text()');

    とかで済ませてしまいそうです。



    2012年2月22日 4:28
  • お答えありがとうございます。

    早速試しましたが、下記の部分自体エラーが出てしまします。いろいろ試しましたが解決できませんでした。

    SET @ip = select top1 @xml.query('/EVENT_INSTANCE/ClientHost/text()');

    他に良い方法があればまた教えてください。

    2012年2月24日 7:07
  • うーん? とりあえず、タイトルにもされている問題である EVENTDATA() はきちんとした XML を返していますよね?

    XML の取得がきちんとできていれば、あとは XQuery の書き方だけの問題ですので、XQuery について調べていくのがよいかと思います。

    2012年2月25日 6:17