如何阻止SQL尝试将nvarchar转换为INT?
我试图在SQL中运行一个简单的查询,但我不断得到错误“ 将nvarchar值“EA000006”转换为数据类型int时,转换失败 我不希望SQL将数据转换为INT,我希望它只是在列中显示正常存储的所有结果。是什么导致我的脚本尝试转换此字段?脚本很简单:如何阻止SQL尝试将nvarchar转换为INT?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我试图在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
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'
选择
A.OrderNbr作为“订单号”(导致错误的字段)
,A.OrderDate作为“订单日期”
,B.库存CD作为“SKU”
,A.TranDesc作为“Descrption”
,A.订单数量为“数量”
,A.ExtPrice作为“价格”
,C.分销商ID为“分销商ID”
,C.名为“名”
,C.姓为“姓”
,C.发货地址为“发货地址”
,C.发货地址为“发货地址2”
,C.船市作为“船市”
,C.船舶所在地为“船舶国”
,C.船国为“船国”
,C.船舶邮政编码为“船舶邮政编码”
从[SOLine]A
左连接[InventoryItem]B
在A.InventoryID=B.InventoryID和A.CompanyID=B.CompanyID上
左连接[命令]C
在A.OrderNbr=C.Order\u ID上
其中A.OrderDate>=“2020-01-01”
和A.订单日期<'2021-01-01'
计算此联接子句时:
ON A.OrderNbr = C.Order_ID
不同类型的值(nvarchar
与int
)必须根据转换为相同的类型进行比较。避免错误的一种方法是将int
列显式转换为nvarchar
。例如(假设Order\u ID
为int):
在执行此操作之前,请注意一些含义:
- 转换将阻止有效使用
上的索引订单ID
- 比较将遵循字符而不是数字比较规则(例如,
value“00”将不等于OrderNbr
value 0)Order\u ID
- 错误可能是因为比较了错误的列,因为如果类型实际上是相同的属性,则类型应该相同
。这两列的数据类型是什么?
ON A.OrderNbr = CAST(C.Order_ID AS nchar(10))