【问题标题】:sql error: Conversion failed when converting the nvarcharsql错误:转换nvarchar时转换失败
【发布时间】:2011-11-30 14:21:02
【问题描述】:

我正在尝试运行此查询,但无法正常工作。我收到一个错误。如何解决?:

将 nvarchar 值“Jon Yang”转换为数据类型 int 时转换失败。

sql

use adventureworks 
go 

select si.CustomerID, 
'myField' = 
            CASE 
                 When (Select Top 1 FirstName+ ' ' + LastName + ' ' + EmailPromotion   From Person.Contact pc Where si.ContactID = pc.contactid ) is not null Then  
            Cast((Select Top 1 FirstName+ ' ' + LastName  + ' ' + EmailPromotion From Person.Contact pc Where si.ContactID = pc.contactid  ) As varchar) 
            Else '' 
            END 
from Sales.Individual si 
where si.CustomerID=11000 

【问题讨论】:

    标签: sql sql-server-2008


    【解决方案1】:

    因为datatype precedence出现错误:nvarchar将被转换为int。

    它位于EmailPromotionCustomerID 上,因此请决定您想要在下面的哪一行。 此外,无需使用内联查询。

    select
        si.CustomerID, 
        'myField' = ISNULL(FirstName + ' ' + 
                           LastName  + ' ' + 
                           Cast(EmailPromotion AS nvarchar(100))
                           -- EmailPromotion ?
                           , '')
    from
        Sales.Individual si 
        LEFT JOIN
        Person.Contact pc ON si.ContactID = pc.contactid
    where
        si.CustomerID = N'11000'
        -- si.CustomerID = 11000 ?
    

    没有 ORDER BY 的 TOP 是没有意义的,所以如果 Person.Contact 中的每一行 Sales.Individual 中的每一行都有多行,那么你需要另一个构造...

    【讨论】:

      【解决方案2】:

      您要添加的字段之一必须是 int 类型 - 可以是“EmailPromotion”字段吗?无论如何 - 添加意味着转换,但显然您不能将名称添加到数字。相反,试试这个:

      use adventureworks 
      go 
      
      select si.CustomerID, 
      'myField' = 
                  CASE 
                       When (Select Top 1 FirstName+ ' ' + LastName + ' ' + cast(EmailPromotion   as nvarchar) From Person.Contact pc Where si.ContactID = pc.contactid ) is not null Then  
                  Cast((Select Top 1 FirstName+ ' ' + LastName  + ' ' + cast(EmailPromotion   as nvarchar)  From Person.Contact pc Where si.ContactID = pc.contactid  ) As varchar) 
                  Else '' 
                  END 
      from Sales.Individual si 
      where si.CustomerID=11000 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-06
        • 2019-03-06
        • 2014-10-13
        • 1970-01-01
        • 1970-01-01
        • 2011-01-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多