2012-05-02 1 views
6

SQLクエリが期待通りに動作していない私はこのクエリをSQL Serverで標準のASP.NETメンバーシップテーブル構造を使用していますし、手動で管理スタジオで照会のビットをやっていたし、走った

SELECT * 
FROM [aspnet_Users] 
WHERE UserId = '2ac5dd56-2630-406a-9fb8-d4445bc781da&cID=49' 

お知らせ& CID = 49最後に - これをクエリ文字列からコピーし、その部分を削除するのを忘れました。

しかし、私の驚いたことに、データが正しく返されました(ID 2ac5dd56-2630-406a-9fb8-d4445bc781daのユーザーがいます)。それはGuidに変換できないはずなので、私の心には一致しないか、おそらくエラーを投げる可能性が高いですか?

+0

から引用され

注意? –

答えて

3

uniqueidentifierタイプは、文字表現からの変換の目的のための文字型と考えられ、従って文字型に変換する切り捨てルールが適用されています。つまり、文字式が異なるサイズの文字データ型に変換された場合、新しいデータ型には長すぎるの値は切り捨てられます

ユニークIDタイプは、36文字のに制限されているため、その長さを超える文字は切り捨てられます。上記の値がDBにexcatlyあるものMSDN

+0

+1。しかし、その奇妙な....私はA123ではなくA123blablaを検索するように彼に言った..... –

+0

ありがとう、それは今より意味をなさないが、私はそれが奇妙であることに同意する - 私は36文字未満の値を渡す場合変換エラーが発生するので、私はそれ以上に渡すと失敗するだろうと私は期待しています! –

2

パーサGUIDリテラルに文字列リテラルを変換する場合(著しく)緩い、明らかにされている:

SELECT CAST('E63F4FFC-8574-428B-B6B8-95CFCA05ED52' AS uniqueidentifier) 
SELECT CAST('E63F4FFC-8574-428B-B6B8-95CFCA05ED52a' AS uniqueidentifier) 
SELECT CAST('E63F4FFC-8574-428B-B6B8-95CFCA05ED52-!' AS uniqueidentifier) 
SELECT CAST('E63F4FFC-8574-428B-B6B8-95CFCA05ED52~#5' AS uniqueidentifier) 
SELECT CAST('E63F4FFC-8574-428B-B6B8-95CFCA05ED52$3%] ' AS uniqueidentifier) 

全ては、エラーが同じ結果を与えません。

This is documented behaviourので、私たちは本当に文句を言うことはできません。 値に変換されるデータ型に対して長すぎる場合

次の例では、データの切り捨てを示しています。 uniqueidentifierタイプは36文字に制限されているため、 がその長さを超える文字は切り捨てられます。

DECLARE @ID nvarchar(max) = N'0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong'; 
SELECT @ID, CONVERT(uniqueidentifier, @ID) AS TruncatedValue; 

ここに結果セットがあります。

String          TruncatedValue 
-------------------------------------------- ------------------------------------ 
0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong 0E984725-C51C-4BF4-9960-E1C80E27ABA0 

(1 row(s) affected) 
+0

ありがとう、私は今理解しています - でも、奇妙なものに見えます! –

関連する問題