0

次の手順があります。

ALTER PROCEDURE [dbo].[myProcedute]
    @mydate VARCHAR(8000) = NULL

IF @mydate = ''
        BEGIN
            SET @mydate = NULL
        END
        ELSE 
        BEGIN
        SET @mydate = CONVERT(DATETIME, @mydate, 103) -- dd/mm/yy
        END

    INSERT INTO  dbo.myTable(theDate) VALUES(@mydate)

そして、私はそれを次のように実行します:

EXEC  [dbo].[myProcedure] '02/02/2012'

実行後、このエラーが発生します:文字列から日時を変換するときに変換に失敗しました。

vb6 コードから実行しますが、日付は異なる場合があります。今回は「2012/02/02」ですが、次回は「(空)」になるかもしれません。

'' になったら、IF 句でわかるように NULL を挿入する必要があります。

このエラーが発生するのはなぜですか?

どうもありがとう !

4

2 に答える 2

1

ISDATE()を使用して、それが有効な日付であるかどうかを確認します。

変換は問題ないようです。そしてコメントが示唆するように、あなたがパラメータをに変更することができればそれは多くを解決するでしょうDATE

ALTER PROCEDURE [dbo].[myProcedute]
    @mydate VARCHAR(8000) = NULL

IF ISDATE(@mydate)
    BEGIN
        SET @mydate = CONVERT(DATETIME, @mydate, 103) -- dd/mm/yy
    END
    ELSE 
    BEGIN
        SET @mydate = NULL        
    END

INSERT INTO  dbo.myTable(theDate) VALUES(@mydate)
于 2013-01-25T09:58:27.077 に答える
0

日付文字列をISO形式yyyymmdd)にフォーマットすることをお勧めします。これは、任意のsql-serverで機能することが保証されています。dd/mm/yyyyあなたが(あなたのデータに従って)それを次のように渡すvbコードを仮定します。これを試して;

--Format @mydate to yyyymmdd
SELECT @mydate = CASE LEN(@mydate) WHEN 10 
         THEN RIGHT(@mydate,4)+ SUBSTRING(@mydate,4,2)+ LEFT(@mydate,2)
         ELSE NULL END
--Insert
INSERT INTO  dbo.myTable(theDate) VALUES(@mydate)
于 2013-01-25T10:05:54.717 に答える