sql错误:转换nvarchar转换失败
问题描述:
我想运行这个查询,但不工作。我收到一个错误。如何解决?:sql错误:转换nvarchar转换失败
将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
答
由于datatype precedence错误发生: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是没有意义的,所以如果你在Sales.Individual
有多个排在Person.Contact
每一行你需要另一种构建...
答
一个要添加必须是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