SQL Server で varchar を uniqueidentifier に変換する 質問する

SQL Server で varchar を uniqueidentifier に変換する 質問する

スキーマを制御できないテーブルに、varchar(50) として定義された列が含まれており、その列には 'a89b1acd95016ae6b9c8aabb07da2010' (ハイフンなし) の形式で一意の識別子が格納されます。

これらを SQL で一意の識別子に変換して、.Net GUID に渡したいと考えています。ただし、次のクエリ行は機能しません。

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

結果は次のようになります:

メッセージ 8169、レベル 16、状態 2、行 1
文字列から一意の識別子への変換に失敗しました。

ハイフンで区切られた uniqueidentifier を使用した同じクエリは正常に機能しますが、データはその形式で保存されません。

これらの文字列を SQL で一意の識別子に変換する別の (効率的な) 方法はありますか。 -- .Net コードでそれを実行するつもりはありません。

ベストアンサー1

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)

おすすめ記事