[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 メーリングリストの案内