Sql server 将varchar转换为bigint时出错
我正在执行下面的查询。在查询中,ChID不是Cat表的列。为此,我将0放置为ChID,并将其转换为bigint数据类型,以匹配列的数据类型CatAtt。但我得到了以下错误: Msg 8114,第16级,第5状态,第1行Sql server 将varchar转换为bigint时出错,sql-server,common-table-expression,Sql Server,Common Table Expression,我正在执行下面的查询。在查询中,ChID不是Cat表的列。为此,我将0放置为ChID,并将其转换为bigint数据类型,以匹配列的数据类型CatAtt。但我得到了以下错误: Msg 8114,第16级,第5状态,第1行 将数据类型varchar转换为bigint时出错 我在Oracle中执行了类似的查询,并进行了与Oracle相关的更改,得到了结果 WITH rg (ID, ChID, Name) AS ( SELECT ID, CAST(0 AS bi
将数据类型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
尝试转换而不是强制转换
WITH rg (ID, ChID, Name) AS
(
SELECT
ID,
CONVERT(bigint , '0') 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, cast((ka.Type) as nvarchar(max)) + '_', cast((dt.OwnerID as nvarchar(max)) + '_')) = rg.Name
什么数据类型是CatAtt.ChID?这可能就是问题所在。CatAtt.ChID的数据类型是bigint。您的一个联接的
VARCHAR
值不是数字。我猜是app.UserIdentifier
。您可以使用SQL Server 2012+的TRY\u CONVERT()
查找购买哪一款。否则,您将不得不深入挖掘,因为如果您不能很好地理解,ISNUMERIC
可能会有问题。因此,尝试类似于从父级选择UserIdentifier这样的操作,其中try\u CONVERT(bigint,UserIdentifier)为null
首先,您应该使用ANSI-92样式的联接,而不是旧的逗号分隔列表。最重要的是,您不应该在一个查询中混合使用这两种样式。你能解释一下为什么你认为这会有什么不同吗?错误消息是关于将varchar转换为bigint的。因此我认为“convert(bigint,'0')chID”会将零转换为bigint是的,我再次验证了,发现错误在Replace方法中,其中ka.Name是nvarchar而不是null,ka.type是bigint而不是null,dt.ownerid是bigint而不是null。在oracle中,语法是“REPLACE(ka.Name,ka.Type | |“”,dt.ownerid | |“”)=rg.Name”,它起作用并得到结果。我通过删除Replace方法在SQL中进行验证并执行,结果显示出来,当我保留条件时,我得到了错误。@Ashu这是正确的,但这不是OP的问题。他们的代码正在将0转换为bigint。这里面没有varchar。错误在他们代码的其他地方。@Sean我明白你的意思了,现在我对先前给出错误的REPLACE函数进行了更改