3

select コマンドがあり、アンサー レコードが返されますが、Visual Studio 2010 のクエリ ビルダーでも次のクエリでエラーが発生します。

SELECT  *
FROM    Orders
WHERE   (BCode = 025) AND (Date BETWEEN '1390%' AND '1391%') OR
        (Date BETWEEN '1390%' AND '1391%') AND (MCode = 0123456789)

エラーは次のとおりです。

エラー メッセージ: nvarchar 値 "0854697543" の変換により
、int 列がオーバーフローしました

データ型は

BCode : nvarchar(50)
Date :  nvarchar(50)
MCode : nvarchar(10)

問題はどこだ?

4

2 に答える 2

2

そうじゃないかな

AND (MCode = '0123456789')

?

そうしないと、0123456789 を整数として使用しようとするため、変換エラーが発生します。

Date BETWEEN...さらに、より簡潔なロジック ( ) で自分自身を繰り返しています。

WHERE   (Date BETWEEN '1390%' AND '1391%') AND
        ((BCode = 025) OR (MCode = '0123456789'))
于 2011-11-17T14:42:08.220 に答える
1

私は問題がどこにあるかを理解していると思います:あなたはクエリでMCode(これはnvarchar) を整数値 ( 0123456789) と比較しているので、エンジンはすべてのレコードのフィールドを int に変換しようとしています!! これを試して

SELECT  *
FROM    Orders
WHERE   (BCode = '025') AND 
        (LEFT(Date, 4) = '1390' OR LEFT(Date, 4) = '1391') AND 
        (MCode = '0123456789')

コメントで既に述べたように、nvarchar(50)日付を保存するために使用しないでください!! すべての列に適切なデータ型 (DateTime または Date など) を使用します。これにより、将来の頭痛の種が回避され、クエリの設計が容易になり、クエリの実行が非常に高速になります。

于 2011-11-17T14:40:37.900 に答える