我今天遇到了奇怪的问题.我的一个项目是运行.NET + SQL Server 2005 Express.我使用一个查询进行一些过滤.
SELECT *
FROM [myTable]
where UI = 2011040773395012950010370
GO
SELECT *
FROM [myTable]
where UI = '2011040773395012950010370'
GO
Run Code Online (Sandbox Code Playgroud)
UI列nvarchar(256)和传递给过滤器的UI值始终为25位.
在我的DEV环境中 - 两个查询都返回相同的行而没有错误.但是在我的客户,运行几个月后,第一个版本开始返回类型转换错误.
知道为什么吗?
我不是在寻找解决方案 - 我正在寻找解释为什么在一个环境中它起作用而在另一个环境中却没有,为什么突然之间它开始返回错误而不是结果.我在两者上都使用相同的工具(SQL Server Management Studio Express和2个不同的.NET客户端)
环境或多或少相同(W2k3 + SQL Server 2005 Express)
假设MBR_DTH_DT的所有值都计算为值'00000000'以外的Date数据类型,如果在过滤器之前通过竞争线程执行CAST,则在多个处理器上运行时,以下UPDATE SQL是否会失败?
UPDATE a
SET a.[MBR_DTH_DT] = cast(a.[MBR_DTH_DT] as date)
FROM [IPDP_MEMBER_DEMOGRAPHIC_DECBR] a
WHERE a.[MBR_DTH_DT] <> '00000000'
Run Code Online (Sandbox Code Playgroud)
我试图找到以下错误的来源
Error: 2014-01-30 04:42:47.67
Code: 0xC002F210
Source: Execute csp_load_ipdp_member_demographic Execute SQL Task
Description: Executing the query "exec dbo.csp_load_ipdp_member_demographic" failed with the following error: "Conversion failed when converting date and/or time from character string.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.
End Error
Run Code Online (Sandbox Code Playgroud)
它可能是另一个UPDATE或INSERT查询,但是所讨论的othrs似乎有从我看到的内容中输入的数据,所以我对上面的内容保持不变.