7

次のプロシージャ インターフェイスがあります。

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

このように呼び出すと:

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

次のエラーが表示されます。

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

4

4 に答える 4

15

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

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

20120720
于 2012-07-25T14:09:33.960 に答える
2

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

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

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

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

于 2012-07-25T14:11:10.090 に答える
1

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

于 2015-11-16T08:13:10.750 に答える
0

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

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

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

103 は、探している日時コードです。

于 2012-07-25T14:18:13.243 に答える