0

私は主に動的SQLで構成される大きなプロシージャを持っています。日付フィールドの1つを設定する際に問題が発生しました。

DECLARE @WorkDate DATETIME 

SET @WorkDate = 'SELECT MIN(__Insert_Date) FROM  ' + @DatabaseName + '.'
                            + @SchemaName + '.' + @TableName + '_Hist'

SET @WorkDate = DATEADD(DAY, DATEDIFF(DAY, '19000101', @WorkDate), '19000101')

これは大きな手順の一部です。したがって、上記のクエリを実行すると、次のエラーが発生します。

メッセージ241、レベル16、状態1、行68
文字列から日付や時刻を変換するときに変換に失敗しました。

4

3 に答える 3

0

このデータベースの日付フィールドはDateTime値として保存されていないようです。

于 2012-08-08T15:39:38.267 に答える
0

の代わりに19000101、 を使用します1900-01-01。文字列の日付形式を認識できないか、@WorkDate値が無効です。

于 2012-08-08T15:39:40.090 に答える
0

@WorkDate は DATETIME であり、文字列として設定すると、変換が失敗する理由 EDIT :

これを試して:

DECLARE @WorkDate DATETIME, @WorkDateString varchar(100)

SET @WorkDateString = 'SELECT MIN(__Insert_Date) FROM  ' + @DatabaseName + '.'
                        + @SchemaName + '.' + @TableName + '_Hist'

SET @WorkDate = DATEADD(DAY, DATEDIFF(DAY, '19000101', @WorkDate), '19000101')

@WorkDateを選択文字列に挿入する必要がある場合__Insert_Dateは、次のように順序を逆にする必要があります

DECLARE @WorkDate DATETIME, @WorkDateString varchar(100)

SET @WorkDate = DATEADD(DAY, DATEDIFF(DAY, '19000101', @WorkDate), '19000101')

SET @WorkDateString = 'SELECT MIN(' + CAST(@WorkDate as varchar(19)) + ') FROM  ' + @DatabaseName + '.'
                        + @SchemaName + '.' + @TableName + '_Hist'

を選択文字列に挿入しようとしているかどうかはわかりませんが、@WorkDateそれがそれを達成する方法です

于 2012-08-08T15:44:45.373 に答える