2

私はVB6自分の仕事で古いプログラムをデバッグしようとしています。それはバグとハードコードされたものでいっぱいです。

プログラムはSQLServer2005データベースに接続して、ストアドプロシージャを使用して情報を読み書きします。

作業中はプログラムがまだ使用されているため、データベースのバックアップを作成していくつかのことをテストし、SQLServer2008のバージョンで復元しました。すべてが正常に機能していました。

翌朝来たとき、夜はプログラムを使わなかったのに、前夜はなかったというエラーが出ました。

問題 :

"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

データベースのコピーに接続するときに、おそらくdateformatdmyを設定しているはずです。日付形式は、使用される言語によって暗黙的に設定されます。言語を設定します

パラメータの形式を変更してYYYYMMDDも安全ですが、パラメータをに変更することもできset dateformatますdatetime

それがオプションでない場合は、を使用してクエリを書き直すことができます where fcdate=convert(datetime, @Datest, 111)

于 2012-06-14T15:20:20.730 に答える