none
sp_executesql使用時の照合順序 RRS feed

  • 質問

  • いつもお世話になっております。サヴロウと申します。

    sp_executesqlでの照合順序について質問致します。

    [環境]
    データベース : 2008SP1 10.0.2531.0 X86 Build 7600
    インスタンスの照合順序 : Japanese_XJIS_100_CI_AS
    テストデータベース(名称:test1)の照合順序 : Japanese_XJIS_100_CI_AS

    [テストテーブル]
    CREATE TABLE Master1(
     Code nvarchar(20) NOT NULL,
     Contents nvarchar(1000),
    CONSTRAINT [PK_Master1] PRIMARY KEY (Code))

    [テストデータ]
    insert into Master1
    values
    ('a','aです'),
    ('b','bです'),
    ・・・(中略)
    ('z','zです')

    select * from master1 where code like 's%'

    をmanegementstudioで実行すると

    Code Contents
    ---- --------
    s    sです

    と帰ってきますが(もちろんa~zすべて)

    exec sp_executesql N'select * from master1 where code like @Code',N'@Code nvarchar(2)',@Code='s%'

    とすると"s"のみ検索がヒットしません。
    照合順序の問題と思いまして
    exec sp_executesql N'select * from master1 where code like @Code collate japanese_CI_AS',N'@Code nvarchar(2)',@Code='s%'
    とcollateをつけるとヒットします。
    なぜこのような現象になるのかどなたかお分かりでしょうか?

    ※sp_executesqlを使わなければいいのですが、
    ADO.NETで検索を行うと自動的にsp_executesqlに変換されてしまいます。

    [ソースのサンプル(VB.NET)]
    Using conn As SqlConnection = New SqlConnection("Data Source=(local);Initial Catalog=test1;Integrated Security=True")
        conn.Open()
        Dim sql As String = "select Contents from master1 where code like @Code"
        Dim cmd As New SqlCommand(sql, conn)
        cmd.Parameters.AddWithValue("@Code", TextBox1.Text & "%")
        MessageBox.Show(cmd.ExecuteScalar)
    End Using

    過去のトピックも検索しましたが、T-SQLとsp_executesqlの結果が違うというものはなかったので質問させて頂きました。
    よろしくお願いいたします。

    2011年8月1日 10:15

回答

  • たぶん不具合なんではないかと。
    #どのKBが対応するかは調べていません。

    SPなし、SP1(2008SP1 10.0.2531.0 )で発生

    SP2(2008SP2 10.0.4000.0 )起きず

    #ちなみに、SQL Server 2008 R2でも発生しませんでした。

    • 回答としてマーク savurou 2011年8月3日 0:42
    2011年8月2日 10:12

すべての返信

  • たぶん不具合なんではないかと。
    #どのKBが対応するかは調べていません。

    SPなし、SP1(2008SP1 10.0.2531.0 )で発生

    SP2(2008SP2 10.0.4000.0 )起きず

    #ちなみに、SQL Server 2008 R2でも発生しませんでした。

    • 回答としてマーク savurou 2011年8月3日 0:42
    2011年8月2日 10:12
  • SP2 - 10.0.4000.0にアップしたら正しく動作することを確認しました。

    KBは軽く調べてみたのですが、どれが該当するかを見つけられませんでした。

    ありがとうございました。

    2011年8月3日 0:46