2

2 つの異なる列タイプを比較しようとしています (データ変換プロジェクトの一部であり、私が行っているわけではありません)。1 つは、次のように保存されたフォーム GUID を持っています。

0CAF3FBC-3C76-420B-B0C4-42867551E3B5

もう1つは、次のように保存されています。

{0CAF3FBC-3C76-420B-B0C4-42867551E3B5}

この列でこれらのテーブルの両方を結合する最良の方法は何でしょうか (残念ながら、両方の主キーです)。これまでのところ、1 つのテーブルを GUID としてキャストしようとしましたが (成功しませんでした)、like ステートメントを作成しようとしましたが、これにアプローチする方法がわかりませんでした。

どんな助けでも大歓迎です。

編集:

データの場合、これは構文的に正しいですか?

inner join  report_temp.workflow_lease_proposal lp
    on wif.form_guid like '%' + lp.form_guid + '%'
4

2 に答える 2

6

異なるデータ型を持つ値を比較する場合、SQL Server は非常にインテリジェントです。

次のスクリプトは、明示的な変換なしでそのまま機能します

DECLARE @TableA TABLE (VARCHARID VARCHAR(48) PRIMARY KEY)
DECLARE @TableB TABLE (GUIDID UNIQUEIDENTIFIER PRIMARY KEY)

INSERT INTO @TableA VALUES 
    ('{0CAF3FBC-3C76-420B-B0C4-42867551E3B5}')
  , ('{0CAF3FBC-3C76-420B-B0C4-42867551E3B6}')
  , ( '0CAF3FBC-3C76-420B-B0C4-42867551E3B7' )
  , ( '0CAF3FBC-3C76-420B-B0C4-42867551E3B8' )

INSERT INTO @TableB VALUES 
    ('{0CAF3FBC-3C76-420B-B0C4-42867551E3B5}')
  , ( '0CAF3FBC-3C76-420B-B0C4-42867551E3B6' )
  , ('{0CAF3FBC-3C76-420B-B0C4-42867551E3B7}')
  , ( '0CAF3FBC-3C76-420B-B0C4-42867551E3B8' )

SELECT  *
FROM    @TableA a
        INNER JOIN @TableB b ON b.GUIDID = a.VARCHARID

結果

VARCHARID                               GUIDID
{0CAF3FBC-3C76-420B-B0C4-42867551E3B5}  0CAF3FBC-3C76-420B-B0C4-42867551E3B5
{0CAF3FBC-3C76-420B-B0C4-42867551E3B6}  0CAF3FBC-3C76-420B-B0C4-42867551E3B6
0CAF3FBC-3C76-420B-B0C4-42867551E3B7    0CAF3FBC-3C76-420B-B0C4-42867551E3B7
0CAF3FBC-3C76-420B-B0C4-42867551E3B8    0CAF3FBC-3C76-420B-B0C4-42867551E3B8
于 2012-07-02T06:41:07.920 に答える
3
inner join  report_temp.workflow_lease_proposal lp
    on 
cast(wif.form_guid as varchar(36))  = cast(lp.form_guid as varchar(36))
于 2012-07-02T06:45:33.270 に答える