ブール値をシミュレートするビットタイプのフィールドがありますが、フィールドを文字列フィールドに連結しようとしています。STUFF FOR XML PATH
を使用してもエラーが発生します。ここでクエリがあります:XMLパスのためのもの
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
については叫んでいます。 だから私はこのような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
そして、それがためにどこかにカンマを私に悲鳴?わからない。
メッセージレベル24、レベル16、状態1、行1 のvarchar値 '、'をデータ型intに変換すると変換に失敗しました。
構文の問題はどこですか?またはこれはより多くのデータ型の問題ですか?
すべてを解き放つことなく、SQL Server 2012以降を使用している場合は、 'CONCAT( '、'、column)'の使用を検討してください。デフォルトのコンバージョンに絡みつくことなく、常に文字列に変換されます。スタッフの代わりに –
? –
いいえ、 ''、' + column'(' '、' + 1'は無効です。なぜなら、SQL Serverでは文字列を整数に変換することが好ましいからです。 –