【发布时间】:2014-02-28 17:48:08
【问题描述】:
我有一个很大的查询抛出了一个错误,我已将其缩减为相当小的块。
SELECT
Reconciliation_Receiving.UserId, *
FROM
Reconciliation_Receiving
LEFT JOIN Profiles.dbo.UserObject ReceivingUser ON Reconciliation_Receiving.UserId = ReceivingUser.g_user_id
抛出的错误是“从字符串转换为唯一标识符时转换失败。”
该错误似乎与 UserObject 和 Reconciliation_Receiving 之间的 LEFT JOIN 相关,因为如果我删除它,查询就会执行。
Reconciliation_Receiving.UserId 是 UNIQUEIDENTIFIER,而 ReceivingUser.g_user_id 是 GUID(nchar(38))。我认为这种差异可能是相关的,但我不知道究竟是什么。据我所知,两者都有有效的指导作为数据(尽管这可能是错误的,并且是我将继续研究的一种途径。)我正在研究的特定案例有一个 WHERE 子句(为简洁起见省略) 其中所有 Reconciliation_Receiving.UserId 值都是 NULL...但我猜坏数据可能在其他地方,因为我的理解是连接是在 WHERE 过滤完成之前完成的。
我尝试搜索存储在 UserObject 列中的数据的长度,以查看是否有一些不良数据以某种方式存储在那里,但没有跳出来。
也就是说,数据可能有什么问题?如何找到它?或者是别的什么?
新信息:当我尝试以下操作时:
SELECT CAST(g_user_id AS uniqueidentifier)
FROM Profiles.dbo.UserObject
它开始打印一些值,然后 bam,同样的错误。所以我肯定在考虑坏数据。但仍然不知道如何真正找到它。
【问题讨论】:
-
可能是
CAST(ReceivingUser.g_user_id AS UNIQUEIDENTIFIER)? -
@MichaelPerrenoud 有趣的是,我只是在尝试这个......我将添加一些信息......
-
您当然可以将左侧转换为 nchar(38)。这不会给你任何错误。
-
@MikaelEriksson :是的,但我担心性能,而且它只会掩盖潜在的数据问题。
标签: sql-server tsql join guid uniqueidentifier