Ошибка SQL: преобразование не удалось при преобразовании nvarchar - PullRequest
0 голосов
/ 30 ноября 2011

Я пытаюсь выполнить этот запрос, но он не работает. Я получаю ошибку. Как исправить?:

Сбой преобразования при преобразовании значения 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 

Ответы [ 2 ]

2 голосов
/ 30 ноября 2011

Ошибка возникает из-за приоритета типа данных : nvarchar будет преобразован в int.

Он либо на EmailPromotion, либо CustomerID, поэтому решите, какую строку вы хотите расположить ниже.Кроме того, нет необходимости использовать встроенный запрос.

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 ?

TOP без ORDER BY не имеет смысла, поэтому, если у вас есть несколько строк в Person.Contact для каждой строки в Sales.Individual, вам понадобится другая конструкция...

0 голосов
/ 30 ноября 2011

Одно из полей, которое вы добавляете, должно иметь тип 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...