【发布时间】:2011-07-10 21:10:38
【问题描述】:
我有一个这样的简单选择语句:
SELECT [dok__Dokument].[dok_Id],
[dok__Dokument].[dok_WartUsNetto],
[dok__Dokument].[dok_WartUsBrutto],
[dok__Dokument].[dok_WartTwNetto],
[dok__Dokument].[dok_WartTwBrutto],
[dok__Dokument].[dok_WartNetto],
[dok__Dokument].[dok_WartVat],
[dok__Dokument].[dok_WartBrutto],
[dok__Dokument].[dok_KwWartosc]
FROM [dok__Dokument]
WHERE [dok_NrPelnyOryg] = 2753
AND [dok_PlatnikId] = 174
AND [dok_OdbiorcaId] = 174
AND [dok_PlatnikAdreshId] = 625
AND [dok_OdbiorcaAdreshId] = 624
dok_NrPelnyOryg 列的类型为 varchar(30),并且不为空。
该表在该列中同时包含整数和字符串值,并且该 select 语句被触发了数百万次。
但是最近这开始崩溃并显示消息:
将 varchar 值“garbi czerwiec B”转换为数据类型 int 时转换失败。
小解释:该表包含多个“文档”记录,并且提到的列包含文档原始编号(来自多个不同来源)。
我知道我可以通过在数字周围添加 '' 来解决此问题,但我宁愿寻找一个解释,为什么它曾经可以工作,而现在它崩溃了却没有改变任何东西。
【问题讨论】:
-
显然错误信息说明了一切。如果
dok_NrPelnyOryg是varchar类型,你为什么不查询它呢?dok_NrPelnyOryg = '2753'。自动转换完全失败,因为他无法将您的值转换为数字。 -
公平地说,问题不在于如何修复它,而更多的是关于为什么它工作了一段时间然后停止工作。
-
@Aaron Bertrand - 这就是重点。我知道如何解决它,我写过它。
标签: sql sql-server tsql