web-dev-qa-db-ja.com

データ型nvarcharをdatetimeに変換中にエラーが発生しました

私は次のプロシージャインターフェイスを持っています:

Create procedure [dbo].[InsertItemDetails]
    @TimeItemAdded datetime

私がそれをこのように呼ぶとき:

EXEC [dbo].[InsertItemDetails]
     @TimeItemAdded = N'20/07/2012 00:00:00';

このエラーが発生します:

メッセージ8114、レベル16、状態5
データ型nvarcharをdatetimeに変換中にエラーが発生しました。

6
fdgfdgs dfg

地域の設定によっては、@TimeItemAddedに渡すパラメータが認識されない場合があります。

日付を次のように渡す必要があります。

20120720

日付には明確な文字列リテラルを使用してください。この場合:

EXEC dbo.InsertItemDetails
    ...
    , @TimeItemAdded = '20120720';

さらに良いことに、日付が正しいことがわかっている場合は、強く型付けされたパラメーターを渡すようにしてください。理想的には、これはいかなる形式の文字列としても提示されるべきではありません。

M/d/yのような地域形式は、ユーザーのセッション、日付形式、言語設定、マシンの地域設定などを考慮して機能することを保証できないため、悪いニュースです。

2
Aaron Bertrand

SQLは日付を7/20/2012として読み取りますが、これは無効です。日付オブジェクトをより安全な形式yyyy-MM-ddで渡すことができます。例:2012-07-20

1
Hamza Yahia

このリンクには、すべての日時形式とその接続が含まれています http://www.sql-server-helper.com/tips/date-formats.aspx

これをvarcharとして渡し、適切な日付形式コードを使用して明示的に日時に変換できます。例えば:

SELECT CONVERT(DATETIME, '20/07/2012 00:00:00', 103)

103はあなたが探している日時コードです。

0
Kevin