【问题标题】:Different Result of stored procedure running from EXCEL or SQL-Server Management Studio从 EXCEL 或 SQL-Server Management Studio 运行的存储过程的不同结果
【发布时间】: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


【解决方案1】:

答案是 EXCEL 的语言。

WHEN @WeekDay IN ('Sunday', 'Sonntag') 

解决问题。

【讨论】:

    【解决方案2】:

    不要使用sp_ 前缀命名存储过程。这是一个坏习惯,可能会与系统程序发生冲突。

    我怀疑您的 Excel 在连接到 SQL Server 期间使用德语区域设置,并且 SQL Server 设置为英语。 所以当你这样做时:

    CASE 
        WHEN @WeekDay = 'Sunday' THEN DATEADD(Day, -2, @Datum_Start)
        ELSE @Datum_Start
    END 
    

    我去ELSE 部分。

    一种快速(肮脏)的解决方法是使用:

    SET @Datum_Start = 
     CASE 
        WHEN @WeekDay IN('Sunday', 'Sonntag') THEN DATEADD(Day, -2, @Datum_Start)
        ELSE @Datum_Start
     END 
    

    另一种是在调用存储过程之前设置英文语言环境:

    SET LANGUAGE us_english;   -- British
    

    请注意,不同的语言可以有一周的第一天(星期日/星期一)。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    相关资源
    最近更新 更多