Sql nvarchar值的转换;0854697543“;select命令中的int列溢出
我有一个select命令,它返回应答记录,但它也在Visual Studio 2010的查询生成器中给出了一个错误:Sql nvarchar值的转换;0854697543“;select命令中的int列溢出,sql,selectcommand,Sql,Selectcommand,我有一个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”的转
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)
问题出在哪里?我想我理解问题出在哪里:您正在将查询中的
MCode
(这是一个nvarchar
)与整数值(0123456789
)进行比较,所以引擎正在尝试将每个记录的字段转换为int!!
试试这个
正如我在评论中已经告诉你的:不要使用nvarchar(50)
来存储日期!!对每一列使用适当的数据类型(例如DateTime或Date):这将避免将来的麻烦,使查询设计更容易,并使查询执行更快 应该是吗
AND (MCode = '0123456789')
?
否则,它将尝试使用0123456789作为整数,这将导致转换错误
此外,您正在重复逻辑(日期介于…
之间),更简洁:
WHERE (Date BETWEEN '1390%' AND '1391%') AND
((BCode = 025) OR (MCode = '0123456789'))
您能告诉我们哪个字段存在
0854697543
值吗?为什么要使用nvarchar
来表示日期?为什么要将日期值存储为nvarchar(50)
?介于“1390%”和“1391%”之间的意味着什么?因为“%”通配符运算符不适用于BETWEEN
子句。@hamze:请参阅我编辑的答案,以更正查询中的许多错误!
WHERE (Date BETWEEN '1390%' AND '1391%') AND
((BCode = 025) OR (MCode = '0123456789'))