文字列から日時を変換するときにエラーメッセージ変換に失敗しました

スタックトレース
    ALTER  PROCEDURE [dbo].[TEST_01]       
     (
        @StartDate  DateTime,
        @EndDate    DateTime
     )
    AS      
    BEGIN      
      SET NOCOUNT ON;  
      Declare @sql as nvarchar(MAX);
      SET @sql = @sql + ';WITH CTE_ItemDetails
                MAX(D.Name) as Name,
                SUM(ISNULL(DT.col1, 0)) AS col1,
                SUM(ISNULL(DT.col2, 0)) AS col2,
                SUM(ISNULL(DT.col3, 0)) AS col3,
                GROUPING(D.ItemType) AS ItemTypeGrouping
            FROM Items D
                INNER JOIN Details DT ON DT.ItemId = D.ItemId
                INNER JOIN Report R ON R.ReportId = DT.ReportId
                where 1=1'
            SET @sql = @sql + ' AND (R.ReportDate >= ' + @StartDate + 'AND  R.ReportDate <=' + @EndDate +')' 

            IF @someOtherVariable is not  null
            SET @sql = @sql + ' AND R.someColumn IN (''' +replace(@someOtherVariableValues,',','')+''+')' 

            SET @sql = @sql + 'SELECT col1, col2, col3 FROM CTE_ItemDetails'
            EXECUTE (@sql)  
    END

上記のT-SQLコードに似たストアドプロシージャがあります。(私が得ているエラーに関係がないと感じる多くのコードを削除したことに注意してください)それを実行すると、以下のエラーが発生します。

文字列から日時を変換するときに変換に失敗しました。

私のパラメータは以下の形式の値を持っています

exec TEST_01 @StartDate=N'4/1/2016 12:00:00 AM',@EndDate=N'4/30/2016 12:00:00 AM'

以下の行でSQLステートメントを動的に設定する方法に問題があるようです

SET @sql = @sql + ' AND (R.ReportDate >= ' + @StartDate + 'AND  R.ReportDate <=' + @EndDate +')' 

エラーを回避するために適用できる最適な日付形式は何ですか。

ゴードン・リノフ

を介してパラメータを使用する必要がありますsp_executesql

しかし、あなたの当面の問題はこの行です:

    SET @sql = @sql + ' AND (R.ReportDate >= ' + @StartDate + 'AND  R.ReportDate <=' + @EndDate +')' 

次のようになります。

SET @sql = @sql + ' AND (R.ReportDate >= ''' + convert(varchar(10), @StartDate, 121) + ''' AND R.ReportDate <= ''' + convert(varchar(10), @EndDate, 121) +''')' ;

文字列への明示的な型キャストと二重一重引用符が含まれているため、日付リテラルは2016 - 04 - 14(つまり、2000)として解釈されないことに注意してください

パラメータを使用するより良い方法は次のようになります。

    SET @sql = @sql + ' AND (R.ReportDate >= @StartDate AND R.ReportDate <= @EndDate)' ;

. . .
exec sp_executesql @sql, N'@StartDate date, @EndDate date)', @StartDate = @StartDate, @EndDate = @EndDate;

SQLステートメントを読む方が簡単です。タイプの問題はパラメーターを介して処理されます。また、クエリプランはより簡単に隠されます。残念ながら、パラメータは定数に対してのみ機能し、たとえば列名やテーブル名に対しては機能しません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

エラーメッセージ241を回避する方法(文字列から日付や時刻を変換するときに変換に失敗しました)

分類Dev

文字列から日付や時刻を変換するときに変換に失敗しました[エラーはトップ(xxxx)で消えます]

分類Dev

そのエラーを解決する方法「文字列から日付や時刻を変換するときに変換に失敗しました」

分類Dev

文字列から日付および/または時刻を変換するときに変換に失敗したというエラー

分類Dev

SQLエラー、文字列から日付や時刻を変換するときに変換に失敗しました

分類Dev

エラー「文字列から日付や時刻を変換するときに変換に失敗しました」

分類Dev

文字列から日付や時刻を変換するときに変換に失敗しました-SQLServerエラー

分類Dev

文字列から日付や時刻を変換するときに変換に失敗しましたか?

分類Dev

文字列から日付や時刻を変換するときに変換に失敗しましたか?

分類Dev

文字列から日付や時刻を変換するときに変換に失敗しましたか?

分類Dev

文字列からデータや時間を変換するときに変換に失敗しました

分類Dev

SQL-文字列から日付や時刻を変換するときに変換に失敗しました

分類Dev

文字列から日付や時刻を変換するときにDateTime変換に失敗しました

分類Dev

tsql-文字列から日付や時刻を変換するときに変換に失敗しました

分類Dev

SQL Server:文字列から日付や時刻を変換するときに変換に失敗しました

分類Dev

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

分類Dev

「文字列から日付や時刻を変換するときに変換に失敗しました」というエラーが発生するSQLServerトリガーをデバッグするにはどうすればよいですか?

分類Dev

日付フィールドを挿入または更新すると、次のエラーが発生します。文字列から日付や時刻を変換するときに変換に失敗しました

分類Dev

Sql Serverにデータを保存すると、「文字列から日付および/または時刻を変換するときに変換に失敗しました」というエラーが表示されます。以下は私のコードです:

分類Dev

パラメータ化されたクエリを使用する場合、文字列から日付や時刻を変換するときに変換に失敗しました

分類Dev

クエリがパラメータ化されているときに文字列から日付や時刻から変換するときにSQLServerの変換に失敗しました

分類Dev

クエリにいくつかのエラーがありました:RequestError:文字列から日付や時刻を変換するときに変換に失敗しました

分類Dev

SQL SERVER 2008で文字列から日付や時刻を変換すると、変換に失敗しました

分類Dev

ピボット中に文字列から日付や時刻を変換するときに変換に失敗しました

分類Dev

文字列から日付を変換するときにSQL / C#の変換に失敗しました

分類Dev

文字列SQL(c#)から日付または時刻を変換するときに日時変換に失敗しました

分類Dev

SQL Server:文字列から時間を変換するときに変換に失敗しました

分類Dev

SQL Server:文字列が午後12時を過ぎた文字から日付や時刻を変換するときに変換に失敗しました

分類Dev

エラー「文字列から日付や時刻を変換するときに変換に失敗しました」は、ある範囲では表示され、別の範囲では表示されません

Related 関連記事

  1. 1

    エラーメッセージ241を回避する方法(文字列から日付や時刻を変換するときに変換に失敗しました)

  2. 2

    文字列から日付や時刻を変換するときに変換に失敗しました[エラーはトップ(xxxx)で消えます]

  3. 3

    そのエラーを解決する方法「文字列から日付や時刻を変換するときに変換に失敗しました」

  4. 4

    文字列から日付および/または時刻を変換するときに変換に失敗したというエラー

  5. 5

    SQLエラー、文字列から日付や時刻を変換するときに変換に失敗しました

  6. 6

    エラー「文字列から日付や時刻を変換するときに変換に失敗しました」

  7. 7

    文字列から日付や時刻を変換するときに変換に失敗しました-SQLServerエラー

  8. 8

    文字列から日付や時刻を変換するときに変換に失敗しましたか?

  9. 9

    文字列から日付や時刻を変換するときに変換に失敗しましたか?

  10. 10

    文字列から日付や時刻を変換するときに変換に失敗しましたか?

  11. 11

    文字列からデータや時間を変換するときに変換に失敗しました

  12. 12

    SQL-文字列から日付や時刻を変換するときに変換に失敗しました

  13. 13

    文字列から日付や時刻を変換するときにDateTime変換に失敗しました

  14. 14

    tsql-文字列から日付や時刻を変換するときに変換に失敗しました

  15. 15

    SQL Server:文字列から日付や時刻を変換するときに変換に失敗しました

  16. 16

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

  17. 17

    「文字列から日付や時刻を変換するときに変換に失敗しました」というエラーが発生するSQLServerトリガーをデバッグするにはどうすればよいですか?

  18. 18

    日付フィールドを挿入または更新すると、次のエラーが発生します。文字列から日付や時刻を変換するときに変換に失敗しました

  19. 19

    Sql Serverにデータを保存すると、「文字列から日付および/または時刻を変換するときに変換に失敗しました」というエラーが表示されます。以下は私のコードです:

  20. 20

    パラメータ化されたクエリを使用する場合、文字列から日付や時刻を変換するときに変換に失敗しました

  21. 21

    クエリがパラメータ化されているときに文字列から日付や時刻から変換するときにSQLServerの変換に失敗しました

  22. 22

    クエリにいくつかのエラーがありました:RequestError:文字列から日付や時刻を変換するときに変換に失敗しました

  23. 23

    SQL SERVER 2008で文字列から日付や時刻を変換すると、変換に失敗しました

  24. 24

    ピボット中に文字列から日付や時刻を変換するときに変換に失敗しました

  25. 25

    文字列から日付を変換するときにSQL / C#の変換に失敗しました

  26. 26

    文字列SQL(c#)から日付または時刻を変換するときに日時変換に失敗しました

  27. 27

    SQL Server:文字列から時間を変換するときに変換に失敗しました

  28. 28

    SQL Server:文字列が午後12時を過ぎた文字から日付や時刻を変換するときに変換に失敗しました

  29. 29

    エラー「文字列から日付や時刻を変換するときに変換に失敗しました」は、ある範囲では表示され、別の範囲では表示されません

ホットタグ

アーカイブ