2016-07-28 21 views
1

useridタイプのカラムがuniqueidentifierで、カラム値が9EBC02CE-FA3A-4A62-A3B7-B9B6CFD33B7EのSQL Serverテーブルがあります。クエリが正常に実行されているSQLクエリーのuniqueidentifierに変換エラーが表示されています

WHERE userid = '9EBC02CE-FA3A-4A62-A3B7-B9B6CFD33B7E' 

:私はこのようなクエリを実行してい

。私は、文字列の末尾に余分な文字を追加する場合、それはまた、細かい

WHERE userid = '9EBC02CE-FA3A-4A62-A3B7-B9B6CFD33B7Eqweqweqwemmmmmmmmmm' 

以下のように取り組んでいる。しかし、私は、クエリがエラーを示している文字列の先頭に余分な文字を追加しているときに問題があります。エラーが唯一の開始時に文字を追加するための表示されている理由

私の質問があるUNIQUEIDENTIFIERした文字列から変換するとき

WHERE userid = 'A9EBC02CE-FA3A-4A62-A3B7-B9B6CFD33B7E' 

よう

を示すエラー、変換に失敗しました文字列とストアドプロシージャ内でこのエラーを追跡する方法

+1

この[回答](http://stackoverflow.com/a/31876166/2451726)が役立ちます。 – Arulkumar

+0

これもコメントと共に... http://stackoverflow.com/questions/1390109/convert-varchar-to-uniqueidentifier-in-sql-server – TheGameiswar

+4

もしあなたが文字列として物を渡すのを止めれば、私はすべてがずっと簡単です。ストアドプロシージャは、必要なものが一意の識別子である場合に*文字列*を受け入れます。なぜそれをパラメータ型にしないのですか? –

答えて

1

Microsoftドキュメントによると:

のuniqueidentifier型は、文字表現からの変換 目的のための文字型と考えられ、従って文字型に変換する切り捨てルールに 主題です。 つまり、文字式を異なるサイズの文字データ タイプに変換すると、新しいデータ タイプでは長すぎる値が切り捨てられます。 「例」セクションを参照してください。

これは、第36位の後に文字を追加するとうまくいく理由を説明しています。

GUIDに文字を追加すると、guidの書式設定ルールが破棄され、変換が失敗します。

ストアドプロシージャでは、TRY_CONVERTを使用してGUIDを検証できます。変換が可能でない場合はNULLを返します:

IF TRY_CONVERT(UNIQUEIDENTIFIER,@userId) IS NULL 
    BEGIN 
     .... report error ... 
    END 

TRY_CONVERTあなたは、古いバージョンでUNIQUEIDENTIFIERへの変換前の文字列を検証する必要がある場合は、次のコードを使用することができますSQL Serverの2012年からのみ利用可能です

IF NOT @userId LIKE REPLACE('00000000-0000-0000-0000-000000000000', '0', '[0-9a-fA-F]')+'%' 
    BEGIN 
      .... report error ... 
    END 
+3

「TRY_CONVERT」はSQL Server ** 2012 **の新機能**ですので、SQL Server ** 2008 **を使用しているOPでは利用できません.... –

+0

回答を編集しました2012年より前のバージョンのSQL Serverを対象としています。 –

関連する問題