【发布时间】:2015-11-26 12:08:51
【问题描述】:
我们有一个用于填充 SSRS 报告的存储过程。这有点像怪物——大量的条件逻辑(在 case 语句中)、从 varchar 到 datetime 的强制转换(有时嵌入在其他强制转换中)以及依赖于调用包含一些日期函数的函数的 3 个字段。该报告包含一个组织的合同列表的财务信息。
我需要创建一个显示一个组织/合同的数据子集的 asp.net 页面,因此我克隆了存储过程并添加了一个合同参数。但是我注意到网页上依赖函数的 3 个字段的数字与直接在数据库上运行存储过程或通过报表运行存储过程时的数字不同。
为了解决问题,我创建了一个页面(使用SqlDataSource 和DataGrid 快速而肮脏),它显示了显示所有合同的原始存储过程的结果。查询通过企业管理器运行良好,但网页因 YSOD 和消息而崩溃
将 nvarchar 数据类型转换为 datetime 数据类型导致值超出范围。
我什至尝试将存储过程中的 SQL 硬编码到网页中,但仍然得到相同的结果
在我的开发机器上,原始存储过程运行,而我的新存储过程确实返回一致的结果,无论是通过网页还是通过 Management Studio 查看。开发服务器和实时服务器上的区域设置等相同。我能想到的唯一不同的是,实时网络服务器和数据库服务器位于不同的机器上。
以前有没有人遇到过这样的事情??
谢谢
【问题讨论】:
-
使用与文化无关的ISO 8601。也可以尝试使用
SET DATEFORMAT dmy;或ymd -
如果可以,请在 ASP.net 应用程序中运行查询之前运行 SQL 分析器以获取正在执行的 SQL,听起来好像传递给存储过程的参数之一不是正确的类型.
-
您是否使用与 ASP.NET 应用程序相同的用户帐户?文化与用户相关联。因此,应用程序用户可能会对您的用户使用不同的日期格式作为示例。这可以解释一些差异。
标签: sql asp.net sql-server stored-procedures