sql - 如何阻止 SQL 尝试将 nvarchar 转换为 INT?
问题描述
我正在尝试在 SQL 中运行一个简单的查询,但我不断收到错误”
将 nvarchar 值“EA000006”转换为数据类型 int 时转换失败。
我不希望 SQL 将数据转换为 INT,我希望它像通常存储的那样简单地显示列中的所有结果。是什么导致我的脚本尝试转换此字段?脚本很简单:
SELECT
A.OrderNbr as 'Order Number' (The Field Causing the error)
,A.OrderDate as 'Order Date'
,B.InventoryCD as 'SKU'
,A.TranDesc as 'Descrption'
,A.OrderQty as 'Quantity'
,A.ExtPrice as 'Price'
,C.Distributor_ID as 'Distributor ID'
,C.First_Name as 'First Name'
,C.Last_Name as 'Last Name'
,C.Ship_Address as 'Ship Address'
,C.Ship_Address_2 as 'Ship Address 2'
,C.Ship_City as 'Ship City'
,C.Ship_Region as 'Ship State'
,C.Ship_Country as 'Ship Country'
,C.Ship_Postal_Code as 'Ship Postal Code'
FROM [SOLine] A
LEFT JOIN [InventoryItem] B
ON A.InventoryID = B.InventoryID AND A.CompanyID = B.CompanyID
LEFT JOIN [Orders] C
ON A.OrderNbr = C.Order_ID
WHERE A.OrderDate >= '2020-01-01'
AND A.OrderDate < '2021-01-01'
解决方案
评估此连接子句时:
ON A.OrderNbr = C.Order_ID
不同类型(nvarchar
与int
)的值必须根据数据类型优先规则转换为相同类型进行比较。避免该错误的一种方法是将int
列显式转换为nvarchar
. 例如(假设Order_ID
是 int):
ON A.OrderNbr = CAST(C.Order_ID AS nchar(10))
在这样做之前,请注意一些含义:
- 转换将阻止索引
Order_ID
被有效使用 - 比较将遵循字符而不是数字比较规则(例如,
OrderNbr
值“00”将不等于Order_ID
值 0) - 该错误可能是因为您正在比较错误的列,因为如果它们实际上是相同的属性,则类型应该相同
推荐阅读
- javascript - “请输入一个值” 当所有输入字段都已满时
- c - The reason why we need a function prototype for methods that is imported from its header file
- cryptography - How to convert from a ESSCertId certHash to a x509SKI?
- php - PHP - 根据项目名称的 SUM 编号
- python - 无法在 Spyder (Python 3.6) 中读取 .CSV 文件,这不是路径或字符问题
- java - 用于下载文件的 Spring 端点成功 (200),但调用 /error 端点 (406)
- bootstrap-4 - 如何使用 Bootstrap 4 显示各种屏幕
- vb.net - 通过函数将小数添加到文本框
- java - TextView 阻止底部导航
- python - 编写一个函数,通过删除指定列的四分位数区域内的行来子集数据帧