Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 连接两个表,一个GUID带破折号,一个不带破折号_Sql_Tsql_Guid - Fatal编程技术网

Sql 连接两个表,一个GUID带破折号,一个不带破折号

Sql 连接两个表,一个GUID带破折号,一个不带破折号,sql,tsql,guid,Sql,Tsql,Guid,我正在尝试连接几个表-问题是其中一个表中的GUID没有破折号 到目前为止,我在研究中发现了一种转换单个guid的方法: DECLARE @uuid VARCHAR(50) SET @uuid = 'ecd5bc3f5cf741acabbbf0fb17634970' SELECT CAST( SUBSTRING(@uuid, 1, 8) + '-' + SUBSTRING(@uuid, 9, 4) + '-' + SUBSTRING(@uuid, 13, 4) + '-'

我正在尝试连接几个表-问题是其中一个表中的GUID没有破折号

到目前为止,我在研究中发现了一种转换单个guid的方法:

DECLARE @uuid VARCHAR(50)

SET @uuid = 'ecd5bc3f5cf741acabbbf0fb17634970'

SELECT  CAST(

        SUBSTRING(@uuid, 1, 8) + '-' + SUBSTRING(@uuid, 9, 4) + '-' + SUBSTRING(@uuid, 13, 4) + '-' +

        SUBSTRING(@uuid, 17, 4) + '-' + SUBSTRING(@uuid, 21, 12)

        AS UNIQUEIDENTIFIER);
但是我如何使用它根据结果连接表呢?
还是有完全不同的方式

连接的一种方法是转换为字符串:

select . . .
from t t1 join
     t t2
     on t1.uuid = replace(convert(varchar(36), t2.uuid), '-', '')
我应该注意到,这使得优化变得困难。您可能希望修改第一个表,使其具有正确类型的uuid列:

alter table t1 add uuid_correct as
    (convert(uniqueidentifier,
             substring(@uuid, 1, 8) + '-' + substring(@uuid, 9, 4) + '-' + substring(@uuid, 13, 4) + '-' +
             substring(@uuid, 17, 4) + '-' + substring(@uuid, 21, 12)
            )
    );

您可以持久化列并在其上构建索引。

首先为什么要将GUID存储在
varchar
中?他们有一个特定的数据类型,
uniqueidentifier
。该表是由外部公司的软件设置的,因此我对设置没有任何影响。我将尝试第一部分,谢谢。更新表不是一个选项,因为数据来自使用table@ChrisW如果您可以控制另一个表,则可以使用UUID的
VarChar(32)
版本向其添加一个持久化的计算列,并对其进行索引。无论采用哪种方法,都可以提高加入的性能。我终于能够尝试这种方法,而且效果很好。非常感谢。