我在运行一个巨大的查询时,在SSMS 17上从SQL Server收到这个错误:
将‘******’转换为数据类型******时转换失败
我以前从未看到过涉及到星号(****)的情况,并且谷歌搜索似乎没有找到任何相关信息。 SQL Server为什么会用星号提供此消息?是否有已知原因?
我在运行一个巨大的查询时,在SSMS 17上从SQL Server收到这个错误:
将‘******’转换为数据类型******时转换失败
我以前从未看到过涉及到星号(****)的情况,并且谷歌搜索似乎没有找到任何相关信息。 SQL Server为什么会用星号提供此消息?是否有已知原因?
您是否从视图中获取数据?如果是这样,您可能会遇到使用中的视图问题。例如,在我的情况下,我正在从一个视图中检索数据,当我尝试在SSMS中查看时,它向我显示了关于错误的更多详细信息。
我的错误也是:“转换失败,当将******值'******'转换为数据类型******时”。
我的问题最终出现在我的连接(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
FULL JOIN CAST(Product.ProductID as varchar(50)) = ProductDetails.Product
补充说明:我之后更改了连接方式,改为左外连接,这样更符合我们的业务逻辑。此外,我并没有测试过这段代码,只是为了说明而进行了修改。
如何复现问题: 有时候查询会正常工作。但我发现当我在WHERE子句中有两个字符串比较时,就会出现问题。
WHERE field like '%' + @var + '%'
OR field2 like '%' + @var2 + '%'
当我试图将nvarchar和int合并为一个字符串时,我遇到了相同的错误。通常它会告诉我我弄错了哪个数据类型,但偶尔会出现你得到的错误。
我从以下内容开始:
SELECT ';' + [myNumber]
到
SELECT ';' + CAST([myNumber] as nvarchar(100))
这对我来说解决了问题。
所以,正如其他人所建议的那样,我想这是类似的问题,您需要将其中一个值转换或强制转换为与其余值匹配。
在我的情况下,问题是在时间参数中,有人使用-1来表示空值。
因此,当我写下以下代码时:
where TripStartTime = -1
我遇到了错误提示信息:
在将 ****** 值 '******' 转换为数据类型 ***** 时转换失败。
为了解决这个问题,我添加了 ''。
where TripStartTime ='-1'
对我来说,错误是由于在我正在使用的 case 语句中引入了一个不寻常的值导致的。向语句添加一个子句以适应新值解决了这个问题。
如果你找不到问题所在,你需要将任何子查询单独运行以查看它们是否运行(我的语句在子查询中),然后开始注释连接/选择的列,直到查询运行并确定问题所在。