【发布时间】:2016-10-12 13:48:05
【问题描述】:
我正在执行以下查询。在查询中,ChID 不是 Cat 表的列。为此,我将 0 作为 ChID 并将其转换为 bigint 数据类型以匹配 CatAtt 的列数据类型。但我收到以下错误:
消息 8114,第 16 级,状态 5,第 1 行
将数据类型 varchar 转换为 bigint 时出错。
我在 Oracle 中执行了类似的查询,并进行了与 Oracle 相关的更改,我得到了结果。
WITH rg (ID, ChID, Name) AS
(
SELECT
ID,
CAST(0 AS bigint) ChID,
Name
FROM Cat
WHERE ID = 1000
UNION ALL
SELECT
c.ID,
c.ChID,
k.Name
FROM CatAtt c
JOIN rg p ON (c.ChID = p.ID)
JOIN Cat k ON (c.ID = k.ID)
)
SELECT DISTINCT
ka.ID
FROM
rg, Parent app
JOIN
Cat ka ON (ka.ID = app.UserIdentifier)
JOIN
Owner dt ON (dt.ID = app.ID)
WHERE
app.ID = 25773
AND app.aprroved = 0
AND REPLACE(ka.Name, ka.Type + '_', dt.OwnerID + '_') = rg.Name
【问题讨论】:
-
CatAtt.ChID是什么数据类型?这可能就是问题所在。 -
CatAtt.ChID 的数据类型为 bigint。
-
您的一个联接有一个不是数字的
VARCHAR值。我猜app.UserIdentifier。对于 SQL Server 2012+,您可以使用TRY_CONVERT()找出购买的产品。否则,您将不得不更深入地挖掘,因为如果您不太了解ISNUMERIC,它可能会出现问题。所以试试select UserIdentifier from Parent where TRY_CONVERT(bigint,UserIdentifier) is null -
首先你应该使用 ANSI-92 风格的连接而不是旧的逗号分隔列表。最重要的是,您不应该在单个查询中混合使用两种样式。 sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/…
标签: sql-server common-table-expression