如何阻止SQL尝试将nvarchar转换为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

我试图在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'
选择
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
    上的索引
  • 比较将遵循字符而不是数字比较规则(例如,
    OrderNbr
    value“00”将不等于
    Order\u ID
    value 0)
  • 错误可能是因为比较了错误的列,因为如果类型实际上是相同的属性,则类型应该相同

等号两侧的值应具有相同的类型。您可能正在将nvarchar与int进行比较。请提供a。条件实际上是整个相等。左侧是否为表达式?是否正确使用引号?我已使用更具描述性的脚本版本更新了脚本字段。我的where子句没有查看用于封装错误的字段。请查看A.OrderNbr=C.Order\u ID上的
。这两列的数据类型是什么?
ON A.OrderNbr = CAST(C.Order_ID AS nchar(10))