none
データ型(sql_variant)列のあいまい検索ができない RRS feed

  • 質問

  • こんにちわ。

    実行しているSQLトレースのトレースIDが知りたくて、以下のSQL文を発行しましたが、エラーとなりました。
    検索条件列のデータ型が”sql_variant”の場合、LIKEはサポートされないようです。
    ”sql_variant”列に対するあいまい検索を行うには、どうしたらいいのでしょうか?
    環境:Windows2003、SQL Server 2008(SP1)

    <エラーとなったSQL文>
    DECLARE @TraceID int
    SELECT @TraceID = TraceID FROM ::fn_trace_getinfo(default) WHERE value LIKE '%SQLTRACE%'

    <上記の実行結果>
    メッセージ 8116、レベル 16、状態 1、行 3
    引数のデータ型 sql_variant は like 関数の引数 1 では無効です。

    MSDNで検索したところ、「sql_variant 型のデータの使用」のページで、「sql_variant 型の列は、LIKE 述語ではサポートされません。」との記述を見つけました。
    http://msdn.microsoft.com/ja-jp/library/ms181071.aspx

    <正常終了したSQL文>
    DECLARE @TraceID int
    SELECT @TraceID = TraceID FROM ::fn_trace_getinfo(default) WHERE value = N'C:\temp\SQLTRACE\Output\CLSQLJP1_ACCESSLOG.trc'

    2009年12月26日 7:17

回答

  • こんにちは、nagino です。

    variant 型は binary を含む様々なデータを格納できるので、文字列のみを対象として処理する LIKE は使用できません。
    どんなデータか分からない variant 型のデータと 文字列型のデータ SQLTRACE を比較することは、不可能です。

    variant 型の中のデータが文字列のみだと分かっているのであれば、CAST や CONVERT を使って文字列型に変換してから LIKE するという方法が可能です。

    fn_trace_getinfo.value は、確か binary は含まれなかったと思ったので、CONVERT で nvarchar(8000) などに変換してしまえば、LIKE が使えるかと思います。


    MCITP(Database Developer/Database Administrator)
    2009年12月26日 17:34

すべての返信

  • こんにちは、nagino です。

    variant 型は binary を含む様々なデータを格納できるので、文字列のみを対象として処理する LIKE は使用できません。
    どんなデータか分からない variant 型のデータと 文字列型のデータ SQLTRACE を比較することは、不可能です。

    variant 型の中のデータが文字列のみだと分かっているのであれば、CAST や CONVERT を使って文字列型に変換してから LIKE するという方法が可能です。

    fn_trace_getinfo.value は、確か binary は含まれなかったと思ったので、CONVERT で nvarchar(8000) などに変換してしまえば、LIKE が使えるかと思います。


    MCITP(Database Developer/Database Administrator)
    2009年12月26日 17:34
  • こんにちわ、きゃあ です。

    返信ありがとうございます。
    ご指摘の方法で、CONVERT した後に、LIKE検索することができました。
    ありがとうございました。
    2009年12月26日 18:04
  • フォーラムオペレーターの高橋春樹です。

    naginoさん、いつもお世話になってます。
    アドバイスの投稿、有難うございました。

    きゃあさん、こんにちは。
    MSDNフォーラムのご利用有難うございます。
    今回、naginoさんからの投稿が問題解決に繋がったようなので、
    勝手ながら、回答マークを付けさせてもらいました。

    今後ともMSDNフォーラムをよろしくお願いします(^-^)


    マイクロソフト株式会社 フォーラム オペレーター 高橋春樹
    2010年1月5日 8:51