2

我正在尝试VB6在我的工作中调试一个旧程序。它充满了错误和硬编码的东西。

该程序正在连接 SQL Server 2005 数据库以使用存储过程读取和写入信息。

由于该程序在我工作时仍在使用,因此我备份了数据库以测试一些东西并在我的 SQL Server 2008 版本中恢复它。一切正常。

当我第二天早上进来时,我得到了一个错误,我没有在晚上使用该程序。

问题 :

"exec dbo.sp_Get_Wait_Data '" & DateEx & "'"

DateEx是一个字符串,包含"2012/06/14"

存储过程:

[sp_Get_Wait_Data] @Datest as char(10)  
AS 
    SELECT
        (A lot of column names here) 
    FROM
        Fiche
    LEFT JOIN 
        voyage ON fcid = vofiche
    LEFT JOIN 
        client on fcaccount = cusnov
    WHERE
        fcdate = @Datest 
        AND (void is null or (void > 0 and (void <> 999 and               void <> 1000 and void <> 998))) 
        AND ((fcremarques NOT LIKE '%SYSANNULATION%' OR
              fcremarques IS NULL)  
        AND fcrettime IS NOT NULL)
    ORDER BY 
        FcTime, FcOrgSite, fcdessite

错误信息:

将 varchar 数据类型转换为 smalldatetime 数据类型导致值超出范围

所以错误出现fcdate=@Datest在存储过程中。我尝试在存储过程中添加这一行

SELECT convert(datetime, @Datest, 120)

这对于查询中的转换来说就像一个魅力,但是当其他查询试图访问这个变量时,它会在程序中导致数百个其他错误,所以它不是一个选项。

知道为什么这个查询昨天工作得很好,现在它给了我这个错误吗?提前致谢。

4

1 回答 1

4

您可能在连接到数据库副本时设置了 dateformat dmy 。日期格式由使用的语言隐式设置。设置语言

您可以将参数的格式更改为YYYYMMDD安全的格式,set dateformat甚至更好,将您的参数更改为datetime.

如果这不是一个选项,您可以使用重写您的查询 where fcdate=convert(datetime, @Datest, 111)

于 2012-06-14T15:20:20.730 回答