alc*_*or8 1 xml sql sql-server
我正在尝试将人员表格呈现为XML.我的NAME字段是varchar而我的AGE字段是int.每次它为NULL时,XML转换都会将其转换为0.我希望它是''(如果它是NULL,那么XML会跳过该字段).
SELECT (SELECT CASE WHEN NAME IS NULL THEN ' ' ELSE NAME END,
CASE WHEN AGE IS NULL THEN ' ' ELSE AGE END
FROM TABLE.PERSONS FOR XML PATH('PERSON'), TYPE)
FOR XML PATH('PERSONS'), TYPE
Run Code Online (Sandbox Code Playgroud)
结果是当age为NULL时:
<PERSONS>
<PERSON>
<NAME>JIM</NAME>
<AGE>0</AGE>
</PERSON>
</PERSONS>
Run Code Online (Sandbox Code Playgroud)
我希望它是:
<PERSONS>
<PERSON>
<NAME>JIM</NAME>
<AGE> </AGE>
</PERSON>
</PERSONS>
Run Code Online (Sandbox Code Playgroud)
' '是一个varchar,而不是一个int.在CASE表达的值' '因此被隐式转换为一个int(如int具有较高的数据类型的优先级比varchar).如果你尝试,SELECT CONVERT(int, ' ');你会注意到返回值是0.
您需要将您的年龄转换为varchar:
SELECT (SELECT CASE WHEN NAME IS NULL THEN ' ' ELSE NAME END AS NAME,
CASE WHEN AGE IS NULL THEN ' ' ELSE CONVERT(varchar(3),AGE) END AS AGE --I assume you no will have the age 1000 (or more)
FROM TABLE.PERSONS FOR XML PATH('PERSON'), TYPE)
FOR XML PATH('PERSONS'), TYPE;
Run Code Online (Sandbox Code Playgroud)
我也注意到,你的CASE表情错过了他们END的.
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |