私は次のプロシージャインターフェイスを持っています:
Create procedure [dbo].[InsertItemDetails]
@TimeItemAdded datetime
私がそれをこのように呼ぶとき:
EXEC [dbo].[InsertItemDetails]
@TimeItemAdded = N'20/07/2012 00:00:00';
このエラーが発生します:
メッセージ8114、レベル16、状態5
データ型nvarcharをdatetimeに変換中にエラーが発生しました。
地域の設定によっては、@TimeItemAdded
に渡すパラメータが認識されない場合があります。
日付を次のように渡す必要があります。
20120720
日付には明確な文字列リテラルを使用してください。この場合:
EXEC dbo.InsertItemDetails
...
, @TimeItemAdded = '20120720';
さらに良いことに、日付が正しいことがわかっている場合は、強く型付けされたパラメーターを渡すようにしてください。理想的には、これはいかなる形式の文字列としても提示されるべきではありません。
M/d/yのような地域形式は、ユーザーのセッション、日付形式、言語設定、マシンの地域設定などを考慮して機能することを保証できないため、悪いニュースです。
SQLは日付を7/20/2012
として読み取りますが、これは無効です。日付オブジェクトをより安全な形式yyyy-MM-dd
で渡すことができます。例:2012-07-20
このリンクには、すべての日時形式とその接続が含まれています http://www.sql-server-helper.com/tips/date-formats.aspx
これをvarcharとして渡し、適切な日付形式コードを使用して明示的に日時に変換できます。例えば:
SELECT CONVERT(DATETIME, '20/07/2012 00:00:00', 103)
103はあなたが探している日時コードです。