将******值“******”转换为数据类型******时转换失败。

16

我在运行一个巨大的查询时,在SSMS 17上从SQL Server收到这个错误:

将‘******’转换为数据类型******时转换失败

我以前从未看到过涉及到星号(****)的情况,并且谷歌搜索似乎没有找到任何相关信息。 SQL Server为什么会用星号提供此消息?是否有已知原因?


是的,隐式转换。可能您正在比较不同的数据类型,并且有一些数据无法转换。 - Lukasz Szozda
@LukaszSzozda 但是OP实际上正在接收带有星号的错误消息,这就是问题所在。 - Lamak
1
错误是在SSMS还是其他地方? - S3S
1
列加密和数据屏蔽都已关闭。这是 SQL Server 2017,我正在使用 SSMS 17。感谢大家的帮助。 - Kyle
1
你解决了吗?我从Azure SQL数据库中得到了同样的错误,但还没有成功地复制它。 - Jonathan Sayce
显示剩余4条评论
6个回答

4

您是否从视图中获取数据?如果是这样,您可能会遇到使用中的视图问题。例如,在我的情况下,我正在从一个视图中检索数据,当我尝试在SSMS中查看时,它向我显示了关于错误的更多详细信息。


3

我的错误也是:“转换失败,当将******值'******'转换为数据类型******时”。

我的问题最终出现在我的连接(join)中,我在一个int字段上连接了一个varchar(50)字段。

SELECT TOP (10) Product.Name, ProductDetails.Price
FROM Product
--the ProductDetails.Product field is a varchar field that contains 
--a string of the ProductID which is an int in the Product table
FULL JOIN Product.ProductID = ProductDetails.Product 

我通过将int字段转换为varchar来进行了更正。
FULL JOIN CAST(Product.ProductID as varchar(50)) = ProductDetails.Product

补充说明:我之后更改了连接方式,改为左外连接,这样更符合我们的业务逻辑。此外,我并没有测试过这段代码,只是为了说明而进行了修改。

如何复现问题: 有时候查询会正常工作。但我发现当我在WHERE子句中有两个字符串比较时,就会出现问题。

WHERE field like '%' + @var + '%'
OR field2 like '%' + @var2 + '%'

如果我只进行一次比较,似乎就能正常工作。

2
当您没有足够的权限时,会出现星号。似乎它们只会在某些情况下出现(在我的情况下,使用用户定义函数时)。我不知道为什么,但如果您GRANT UNMASK,则可以看到实际值。

1

当我试图将nvarchar和int合并为一个字符串时,我遇到了相同的错误。通常它会告诉我我弄错了哪个数据类型,但偶尔会出现你得到的错误。

我从以下内容开始:

SELECT ';' + [myNumber]

SELECT ';' + CAST([myNumber] as nvarchar(100))

这对我来说解决了问题。

所以,正如其他人所建议的那样,我想这是类似的问题,您需要将其中一个值转换或强制转换为与其余值匹配。


这也是我的情况的解决方案! - ssavva05

0

在我的情况下,问题是在时间参数中,有人使用-1来表示空值。

因此,当我写下以下代码时:

where  TripStartTime   = -1 

我遇到了错误提示信息:

在将 ****** 值 '******' 转换为数据类型 ***** 时转换失败。

为了解决这个问题,我添加了 ''。

where  TripStartTime   ='-1' 

-1

对我来说,错误是由于在我正在使用的 case 语句中引入了一个不寻常的值导致的。向语句添加一个子句以适应新值解决了这个问题。

如果你找不到问题所在,你需要将任何子查询单独运行以查看它们是否运行(我的语句在子查询中),然后开始注释连接/选择的列,直到查询运行并确定问题所在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接