从字符串转换日期和/或时间时转换失败。 UNION CTE

时间:2015-04-14 21:47:43

标签: sql-server

我已经接到了排除故障的观点。它以CTE开头,该CTE获取在每个查询之间使用UNION的多个表中使用的代理键的所有值。然后,它使用此CTE作为INNER JOIN来选择有关这些代理键的数据。查询类似于以下代码:

WITH emp AS (
    SELECT DISTINCT EmployeeSk FROM view1
    UNION
    SELECT DISTINCT EmployeeSK FROM Table1
    UNION
    --then there are two views that if you include BOTH, the overall query fails
    SELECT DISTINCT EmployeeSK FROM view2
    UNION
    SELECT DISTINCT EmployeeSK FROM View3 )
SELECT Col1, col2, col3
FROM Table2 t2
INNER JOIN emp
    ON t2.EmployeeSK = emp.EmployeeSK 

每当您使用CTE时,用户都会收到错误:

Msg 241, Level 16, State 1, Line 22
Conversion failed when converting date and/or time from character string.

如果单独选择每个查询,则所有查询都返回INT。实际上,我通过对每个源运行以下查询来仔细检查每个查询:

SELECT DISTINCT SQL_VARIANT_PROPERTY(<tableSK>, 'BaseType') FROM <source Table or view>

所有查询都报告返回的所有列都是INT。

我还创建了一个#tempTable:

CREATE TABLE #tmp ( SurrogateKey INT)

然后将每个查询插入#tempTable并且所有插入都有效。所有值均为INT。值范围为-1到16435。

只要我返回两个查询中的一个,我就可以获得与UNION一起使用的所有查询。如果我删除这些查询之一,CTE和UNION语句将起作用,但我不能同时使用它们。这两个查询的值也是INT,并且值也在-1到16435之间。

我不知道为什么会收到此错误。除了将视图重写为存储过程,并将值放入临时表之外,我还能尝试什么?

0 个答案:

没有答案