【发布时间】:2015-11-30 13:52:33
【问题描述】:
我有一个存储过程,它在 EXCEL 和 SQL Server Management Studio 中返回不同的结果。
SP 如下,每个人都可以在每个带有时间戳的表上使用它:
ALTER PROCEDURE [dbo].[sp_SelectByTime]
AS
BEGIN
SET NOCOUNT ON;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
DECLARE @Datum_Start Datetime2(0) = Convert(date, CURRENT_TIMESTAMP)
DECLARE @Datum_End Datetime2(0) = Convert(date, CURRENT_TIMESTAMP)
DECLARE @WeekDay nchar(10)
SET @Datum_Start = DATEADD(Day, -1, @Datum_Start)
SET @Datum_Start = DATEADD(Hour, +6, @Datum_Start)
SET @Datum_End = DATEADD(Hour, +6, @Datum_End)
SET @WeekDay= DATENAME(dw, @Datum_Start)
SET @Datum_Start =
CASE
WHEN @WeekDay = 'Sunday' THEN DATEADD(Day, -2, @Datum_Start)
ELSE @Datum_Start
END
SELECT * FROM TABLE
WHERE timestamp > @Datum_Start AND timestamp < @Datum_End
order BY TABLE.timestamp desc
END
SQL Management Studio 中的结果是正确的。如果我在星期一测试 SP,结果是从上周五早上 06:00 到实际当天(星期一)早上 6:00。
EXCEL 仅显示周日上午 06:00 到实际日期(周一)的结果。从 EXCEL 执行存储过程时,SP 中的 CASE-Structure 似乎不起作用。
那里有什么问题?我做错了什么?
【问题讨论】:
-
不要用
sp_前缀命名存储过程。有您的 Excel 德语语言环境吗?我怀疑@WeekDay = 'Sunday'是问题所在。 -
是的,EXCEL 是德国的,基于我当地的 mashine。
-
快速解决方法:
WHEN @WeekDay IN ('Sunday', 'Sonntag') -
非常感谢。它有效!
标签: sql-server excel stored-procedures time