【问题标题】:Conversion failed when converting the nvarchar value '' to data type int将 nvarchar 值 '' 转换为数据类型 int 时转换失败
【发布时间】:2011-08-29 15:16:51
【问题描述】:

虽然这听起来像是初学者的 101 问题,但我认为它有点复杂。

我有两个 SQL Server 实例,一个是用于报告目的的主数据库的日志传送只读/备用副本。

它们都是 64 位 SQL 2005,SP3。

LogShipped 实例为:9.00.4035.00(标准版) 原始实例为:主动/被动集群中的 9.00.4035.00(企业版)。

两者的服务器排序规则都是 Latin1_General_CI_AI,它们都在 Server 2003 64 位上运行。

我有一个查询在主数据库服务器上运行和执行良好,但它在备用/只读副本上失败,并将 nvarchar 转换为 int。

代码是相同的,我从主实例查询窗口复制并粘贴它只是为了仔细检查。

SQL Server 中的某个地方是否存在错误?如果需要,我可以粘贴查询(它是带有一些内联表的沼泽标准选择)

只是不明白为什么它可以在日志传送的副本上失败。

非常感谢任何指针。

-- 编辑

我找到了罪魁祸首..事务日志数据库包含不在主数据库中的无效数据..为什么他们不同步我还不知道,因为事务日志传送仍在工作并且我有工作历史中没有错误。

只有少数无效的孤立记录不在主数据库中..多么奇怪

【问题讨论】:

  • 一般来说,这个错误听起来你可能在 2 个不同的实例上得到不同的执行计划。在其中一个中,它可能在过滤器之前执行强制转换,而在另一个中,在强制转换之前执行过滤器。错误消息本身很奇怪,因为select cast(N'' as int) 为我返回0。你能在有问题的实例上测试它为你返回什么吗?
  • 嘿,select cast(N'' as int) 在两个实例上都返回 0。我现在看看生成的执行计划..
  • 嘿.. 相同的执行计划,但两个数据库中的数据不一样.. 好像它们已经不同步了!我将调查为什么 stanbdy 数据库是错误的,但在日志传送中没有错误。感谢您的帮助:)

标签: sql sql-server-2005


【解决方案1】:

确定数据是否相同?

如果你尝试

select convert(int, char(10))

它可能会得到类似的错误,因此如果您转换的值是 char(10),您的查询将失败,这在查看数据时可能并不明显。

【讨论】:

  • 感谢您的回答.. 我发现问题在于数据不一样.. 即使数据库是我在不在主数据库中的辅助数据库..不确定这是如何发生的,因为事务日志刚刚完成恢复并且客户仍然在那里..
  • @WesPrice 请将您的发现作为答案发布,以供任何人将来参考。
【解决方案2】:

检查任何触发器是否正在根据您的表更新任何视图(具有特定列的 int)

【讨论】:

    猜你喜欢
    • 2020-04-17
    • 2015-06-20
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多