我有一个字段是模拟布尔值的位类型,但我试图使用STUFF FOR XML PATH
连接字段到一个字符串字段,它不断给我一个错误。这里的查询:XML路径的东西不能连接BIT类型
select
ui.IndivId,
ui.correctedInFNV,
ni.firstName,
ni.prefName,
ni.lastName,
ni.suffix,
ni.alreadyCorrect as nameCorrect,
ni.updated as nameUpdated,
ni.updatedDate,
ni.correctPerson,
ai.addr1,
ai.addr2,
ai.addr3,
ai.city,
ai.state,
ai.zip,
ai.country,
ai.alreadycorrect as adcorrect,
ai.updatedDate,
ai.updated as adupdated,
pi.priPhoneType,
pi.priPhoneNumber,
pi.updated as phoneupdated,
pi.updateddate,
ei.priEmailType,
ei.priEmailAddress,
ei.alreadycorrect as emailcorrect,
ei.updated as emailupdated,
STUFF((SELECT ','+pos.positionTitle from positionInfo as pos where pos.IndivId=ui.IndivId FOR XML PATH('')),1,1,'') AS POS_TITLE,
STUFF((SELECT ','+pos.positionId from positionInfo as pos where pos.IndivId=ui.IndivId for XML PATH('')),1,1,'') as POS_ID,
STUFF((SELECT ','+pos.positionCode from positionInfo as pos where pos.IndivId=ui.IndivId for XML PATH('')),1,1,'') as POS_CODE,
STUFF((SELECT ','+pos.areaServed from positionInfo as pos where pos.IndivId=ui.IndivId for XML PATH('')),1,1,'') as POS_AREA,
STUFF((SELECT ','+pos.districtServed from positionInfo as pos where pos.IndivId=ui.IndivId for XML PATH('')),1,1,'') as POS_DIST,
STUFF((SELECT ','+pos.reason from positionInfo as pos where pos.IndivId=ui.IndivId for XML PATH('')),1,1,'') as POS_REASON,
STUFF((SELECT ','+pos.currentlyHeld from positionInfo as pos where pos.IndivId=ui.IndivId FOR XML PATH('')),1,1,'') AS POS_HELD
from
updatedInfo as ui
join nameInfo as ni on ui.IndivId=ni.nameInfoId
join addressInfo as ai on ui.IndivId=ai.addressInfoId
join phoneInfo as pi on ui.IndivId=pi.phoneInfoId
join emailInfo as ei on ui.IndivId=ei.emailInfoId
JOIN positionInfo AS pos ON ui.IndivId=pos.IndivId
当这样跑,我得到的错误
消息402,级别16,状态1,36线的数据类型为varchar和位是 在增加操作符不兼容。
这是最后STUFF
声明pos.currentlyHeld
尖叫。 所以我尝试转换或铸造领域为char类型是这样的:
STUFF((SELECT ','+CAST(pos.currentlyHeld AS VARCHAR(1)) FROM positionInfo as pos where pos.IndivId=ui.IndivId FOR XML PATH('')),1,1,'') AS POS_HELD
然后尖叫着我,因为一个逗号的地方吗?不确定。
Msg 245,Level 16,State 1,Line 1将 varchar值','转换为数据类型int时,转换失败。
如果是语法问题?或者这是更多的数据类型问题?
没有试图解开一切 - 如果你的SQL Server 2012或更高版本,可以考虑使用'CONCAT( '',列)'。它将始终转换为字符串,而不会被默认转换混乱。 –
而不是东西? –
不是'','+ column'('','+ 1')是无效的,因为SQL Server最好将字符串转换为整数,而不是其他方式,比如合理的系统。 –