[解決済み] SQLクエリでuniqueidentifierに変換失敗のエラーが表示される【重複
質問
SQL Server のテーブルにカラムがあります。
userid
タイプの
uniqueidentifier
で、列の値は
9EBC02CE-FA3A-4A62-A3B7-B9B6CFD33B7E
.
こんな風にクエリしているとき。
WHERE userid = '9EBC02CE-FA3A-4A62-A3B7-B9B6CFD33B7E'
クエリは正常に実行されています。文字列の末尾に余分な文字を追加しても、以下のように正常に動作しています。
WHERE userid = '9EBC02CE-FA3A-4A62-A3B7-B9B6CFD33B7Eqweqweqwemmmmmmmmmm'
しかし、問題は、文字列の先頭に余分な文字を追加したときに、クエリがエラーを表示することです。
WHERE userid = 'A9EBC02CE-FA3A-4A62-A3B7-B9B6CFD33B7E'
というエラーが表示されます。
<ブロッククオート文字列からuniqueidentifierへの変換に失敗しました。
私の質問は、文字列の先頭に文字を追加しただけでエラーが表示される理由と、ストアドプロシージャ内でこのエラーを追跡する方法です。
どのように解決するのですか?
マイクロソフトのドキュメントによると
<ブロッククオートuniqueidentifier型は、文字型とみなされます。 文字式から変換されるため、この文字式は 文字型に変換する際の切り捨てルールが適用されます。 すなわち、文字式を文字データ の型では、新しいデータ型に対して長すぎる値があります。 型は切り捨てられます。例題のセクションを参照してください。
36位以降に文字を追加しても問題なく動作するのはそのためです。
guidに文字を前置すると、guidの書式規則を破ることになり、その後変換に失敗します。
ストアドプロシージャでは、TRY_CONVERTを使用してguidを検証することができます。変換できない場合はNULLを返します。
IF TRY_CONVERT(UNIQUEIDENTIFIER,@userId) IS NULL
BEGIN
.... report error ...
END
TRY_CONVERT は SQL Server 2012 以降で利用可能です。古いバージョンで UNIQUEIDENTIFIER に変換する前に文字列を検証する必要がある場合、次のコードを使用できます。
IF NOT @userId LIKE REPLACE('00000000-0000-0000-0000-000000000000', '0', '[0-9a-fA-F]')+'%'
BEGIN
.... report error ...
END
関連
-
[解決済み] datetimeの挿入時に文字列から日付や時刻を変換すると、変換に失敗する
-
[解決済み] 2つの列を分割するには?
-
[解決済み] ORA-00920: 無効な関係演算子
-
[解決済み] SELECT DISTINCTを指定した場合、ORDER BY項目は必ず選択リストに表示されます。
-
[解決済み] varchar 値の変換で int カラムがオーバーフローしました。
-
[解決済み] 列名または提供された値の数がテーブル定義と一致しません。
-
[解決済み] SQLで複数のGROUP BYを使用する場合とは?
-
[解決済み] SQL Serverでvarcharをuniqueidentifierに変換する
-
[解決済み] T-SQLでnot equalには!=と<>のどちらを使うべきですか?
-
[解決済み】結合を使用したSQL更新クエリ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] varchar データ型から datetime データ型に変換すると、SQL クエリで範囲外の値が発生する
-
[解決済み】Postgresのエラー。式として使用されるサブクエリによって返される複数の行
-
[解決済み】sys.dm_exec_sql_textはどのように機能するのでしょうか?
-
[解決済み] データ型 varchar の変換エラー
-
[解決済み] varchar 値の変換で int カラムがオーバーフローしました。
-
[解決済み] Presto の JSON_EXTRACT で ' ' 文字を含むキーに問題がある。
-
[解決済み] アクセスクエリーエラー(from句のシンタックスエラー)
-
[解決済み] VBA - ADODB.CommandTextの実行
-
[解決済み] SQLで複数のGROUP BYを使用する場合とは?
-
[解決済み] SQL Serverでvarcharをuniqueidentifierに変換する