[seasar-dotnet:602] Re: SQL Server 2005でBinary比較が使えません

KIYOSUE Minoru [E-MAIL ADDRESS DELETED]
2007年 9月 25日 (火) 00:33:31 JST


宮城さま

早々のご回答大変ありがとうございます。

SQL Profilerで実行しました。(結果は以下です。)

exec sp_executesql N'

SELECT
 …………………
WHERE
           CONVERT(VARBINARY, RTRIM(A0.nt02UserID)  )   =
                 CONVERT(VARBINARY, RTRIM(@0))
AND        CONVERT(VARBINARY, RTRIM(A0.nt02Password))   =
                CONVERT(VARBINARY, RTRIM(@1))
AND        A0.DelFlag                                   =       ''0'''
,N'@0 nvarchar(15)[E-MAIL ADDRESS DELETED] 
nvarchar(15)'[E-MAIL ADDRESS DELETED]=N'pVwGuyVTwqXmbXq'[E-MAIL ADDRESS DELETED]=N'gtRBfj93KO9s88s'

となっておりました。

この結果をSQL Studioを実行すると結果が取得できませんでした。

結果、それぞれのパラメータがNVARCHARになっていたために、VARCHARのVARBINARYと
NVARCHARのVARBINARYの比較となっていました。

以下のようにSQLを記述したら、期待する結果を得ることができましたので、上記の理由と
推測しました。

           CONVERT(VARBINARY, RTRIM(A0.nt02UserID)  )   =
                    CONVERT(VARBINARY, RTRIM(CONVERT(VARCHAR, 
/*strUserID*/'m.kiyosue')))
AND        CONVERT(VARBINARY, RTRIM(A0.nt02Password))   =
                   CONVERT(VARBINARY, RTRIM(CONVERT(VARCHAR, 
/*strPassword*/'8888'   )))

  NVARCHARのパラメータを、VARCHARにキャストし、その結果をVARBINARYに変換する。 



確認はいたしておりませんが、 "COLLATE    JAPANESE_BIN"が機能していなかったのも 

同様な理由なのではないかと思われます。



----- Original Message ----- 
From: "Ryo Miyagi" <[E-MAIL ADDRESS DELETED]>
To: <[E-MAIL ADDRESS DELETED]>
Sent: Monday, September 24, 2007 10:34 AM
Subject: [seasar-dotnet:601] Re: SQL Server 2005でBinary比較が使えません


> 宮城です。
>
> SQL文に
> COLLATE JAPANESE_BINをつけている場合、
> CONVERT(BINARY(15) ... で変換しなくても
> 大文字/小文字を区別した比較になると思います。
>
> あとは、
> SQL Server 2005付属の「SQL Server Profiler」を使用して
> 実際に発行されているSQLを確認してもらえますか。
>
> -- 
> Ryo Miyagi <[E-MAIL ADDRESS DELETED]>
>
>> お世話になっております、清末です。
>>
>> 皆様の的確なご指摘により、順調に作業が進み、いよいよ結合テストへと
>> 進むことができました、色々ありがとうございます。
>>
>> さて、仕様から、ユーザID、パスワード等の項目を大文字/小文字を区別して
>> 扱うこととなり、独自拡張のSQLに以下のWhere句を設定しましたが、結果が
>> 取得できません。
>>
>> SQL自体は、SQL Management Studioから実行すると結果が得られるので
>> S2Dao側に何か指定が必要なのでしょうか?
>>
>> WHERE
>>               A0.nt02UserID       =       /*strUserID*/'m.kiyosue'
>> AND        A0.nt02Password   =       /*strPassword*/'8888'
>> AND        A0.DelFlag             =       '0'
>>
>> WHERE
>>               CONVERT(BINARY(15), RTRIM(A0.nt02UserID))
>>                                            =       CONVERT(BINARY(15),
>> RTRIM(/*strUserID*/'m.kiyosue') )
>> AND        CONVERT(BINARY(15), RTRIM(A0.nt02Password))
>>                                            =       CONVERT(BINARY(15),
>> RTRIM(/*strPassword*/'8888'   ) )
>> AND        A0.DelFlag              =       '0'
>> COLLATE    JAPANESE_BIN
>>
>> ご多忙中大変恐縮に存じますが、ご教授下さいますようお願い申し上げます。
>>
>> _______________________________________________
>> seasar-dotnet mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> 



seasar-dotnet メーリングリストの案内