1. ホーム
  2. sql

[解決済み] SQL Serverでvarcharをuniqueidentifierに変換する

2022-03-04 11:16:18

質問

私がスキーマを管理していないテーブルには、varchar(50)として定義されたカラムがあり、フォーマット 'a89b1acd95016ae6b9c8aabb07da2010' (ハイフンなし)でユニークIDを格納しています。

これらをSQLでuniqueidentifiersに変換し、.Net Guidに渡したいのです。しかし、以下のクエリラインは、私には機能しません。

select cast('a89b1acd95016ae6b9c8aabb07da2010' as uniqueidentifier)
select convert(uniqueidentifier, 'a89b1acd95016ae6b9c8aabb07da2010')

と結果が出ます。

Msg 8169, レベル 16, ステート 2, 行 1
文字列から uniqueidentifier に変換する際に、変換に失敗しました。

ハイフンでつながれた uniqueidentifier を使用した同じクエリは問題なく動作しますが、データはそのフォーマットでは保存されません。

SQLでこれらの文字列をuniqueidentifiersに変換する他の(効率的な)方法はありますか?-- .Netのコードでやりたくはないのです。

どのように解決するのですか?

DECLARE @uuid VARCHAR(50)
SET @uuid = 'a89b1acd95016ae6b9c8aabb07da2010'
SELECT  CAST(
        SUBSTRING(@uuid, 1, 8) + '-' + SUBSTRING(@uuid, 9, 4) + '-' + SUBSTRING(@uuid, 13, 4) + '-' +
        SUBSTRING(@uuid, 17, 4) + '-' + SUBSTRING(@uuid, 21, 12)
        AS UNIQUEIDENTIFIER)