0

私は本当にこれに2番目の目を必要としています...私は変数を持つストアドプロシージャを持っています:

DECLARE @date_period_end int 

IF @date_period_end = '' or @date_period_end is null  
BEGIN 
    SET @date_period_end = 'DATEDIFF(dd, ''1/1/1753'', CONVERT(datetime,getdate())) + 639906 ' 
END

実行するとSQLが返すエラーは次のとおりです。

varchar値'DATEDIFF(dd、' 1/1/1753'、CONVERT(datetime、getdate()))+639906'をデータ型intに変換するときに変換に失敗しました。

どこかに引用符がないか、間違った量の引用符を追加したことは間違いありません。ありがとう。

4

5 に答える 5

2

関数を引用符でDATEDIFF囲み、文字列リテラルにしていますが、それは意図したものではないと確信しています。これを試して:

DECLARE @date_period_end int 

IF @date_period_end = '' or @date_period_end is null  
BEGIN 
    SET @date_period_end = DATEDIFF(dd, '1/1/1753', CONVERT(datetime,getdate())) + 639906
END

補足: 整数を空の文字列 ( @date_period_end = '') と比較する理由と、それが何を期待するかはわかりません。

于 2012-11-07T17:06:44.453 に答える
2

DATEDIFF(dd, '1/1/1753', CONVERT(datetime,getdate())) + 639906 に関する引用があるようです

引用符を削除すると、機能するはずです。

于 2012-11-07T17:06:57.533 に答える
1
DECLARE @date_period_end int

IF @date_period_end = '' or @date_period_end is null  
BEGIN 
SET @date_period_end = DATEDIFF(dd,'1/1/1753',CONVERT(datetime,getdate())) + 639906
END

上記のコードとともに以下のステートメントを使用して、この変数の値を確認することもできます。

Print @date_period_end
于 2012-11-08T07:35:58.430 に答える
1

これを試して:

BEGIN
   SET @date_period_end = DATEDIFF(dd, '1/1/1753', CONVERT(datetime,getdate())) + 639906  
END

DATEDIFF() の周りに誤った引用符があり、ダミーの日付が二重引用符で囲まれていました

于 2012-11-07T17:09:29.227 に答える
0

余分な引用符を削除するとうまくいきました-ISNULLを使用してIFチェックを簡素化しました

DECLARE @date_period_end int 

IF ISNULL(@date_period_end,'') = '' 
BEGIN 
    SET @date_period_end = DATEDIFF(dd, '1/1/1753', CONVERT(datetime,getdate())) + 639906 
END
于 2012-11-07T17:11:27.973 に答える