2

我正在尝试比较两种不同的列类型(不是我做的,是数据转换项目的一部分)。其中一个存储了类似于以下内容的表单 guid:

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

另一个将它们存储为以下内容:

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

在此列上加入这两个表的最佳方法是什么(不幸的是,它是两者的主键)。到目前为止,我已经尝试将一张表作为指导(没有成功)并且还尝试建立一个类似的声明 - 但不确定如何解决这个问题。

任何帮助将不胜感激。

编辑:

如果是数据,这在语法上是否正确?

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 回答