【发布时间】:2012-03-01 10:43:11
【问题描述】:
以下代码在被代码执行时似乎没有运行:
存储过程sn-p:
AND (@month_ref = 81201
AND tsks.grouping_ref = @grouping_ref
AND ts.start_dtm BETWEEN convert(datetime, '2011-11-28')
AND convert(datetime,'2012-01-01')
)
OR (@month_ref = 81202
AND tsks.grouping_ref = @grouping_ref
AND ts.start_dtm BETWEEN convert(datetime,'2012-01-02')
AND convert(datetime,'2012-01-29')
)...
服务器设置:
SQL Server 设置为:
- 语言:英语(美国)
并且 Windows Server 区域和语言设置为:
- 英语(美国)
我们的测试服务器是为英式英语设置的,存储过程似乎可以正常工作。我感觉客户设置不喜欢日期。
数据库设计/数据
ts.start_dtm 在数据库中看起来像这样:
-
数据类型 - 日期时间
2011-04-01 00:00:00.000
所以它的设置为 - YEAR | MONTH | DATE
我的存储过程将start_dtm 硬编码为'2012-01-02',格式也相同。
你能帮帮我吗?
问题是网站在尝试运行存储过程时失败。问题是数据转换。我必须指定日期转换的格式。
【问题讨论】:
-
如果你跳过转换的东西会发生什么?
-
我的问题仍然存在...... :(
-
您实际上并没有说出您遇到了什么错误/问题 - 您能否更新问题以添加此内容?
-
你是说英国的设置有效吗?
set language british; select cast('2011-11-28' as datetime)应该失败,us_english应该成功 -
实际上,
YYYY-MM-DD格式确实 NOT 在 SQL Server 中工作 - 例如与“英式英语”。您需要改用YYYYMMDD(没有破折号!)才能真正独立于语言。
标签: sql sql-server sql-server-2008 tsql stored-procedures