sql-server - 选择包含 XML 列中所有值的混合类型列?
问题描述
我有一个混合列类型(int
, varchar
, & xml
)的表。列varchar
具有 XML 格式的数据,并且xml
列具有大型数据节点。我正在尝试选择varchar
包含 XML 的所有列,以使用 SQL 代理作业步骤创建 XML 输出文件。我遇到的问题是定义为 XML 的列在文件中填充了很多空格,并且正在截断该列中的数据。表如下:
CREATE TABLE [dbo].[MixedTYPEXML](
[col1] [varchar](4) NOT NULL,
[col2] [int] NOT NULL,
[xmlinText1] [varchar](190) NOT NULL,
[JOBP] [xml] NULL
)
GO
INSERT INTO [dbo].[MixedTypeXML]
([col1]
,[col2]
,[xmlinText1]
,[JOBP]
)
VALUES
('Prod'
,'35490'
,'<JOBP AllowExternal="1" name="JOBP.EXTRACTS_PHP_SSIS_POST_CORE#35490">'
,'<PreCon><conditions id="CONDITIONS" /></PreCon>'
)
GO
我的选择语句是
SELECT col2, xmlinText1, JOBP from dbo.MixedTypeXML
预期结果如下,但实际结果将是数千条记录。我只用一个小样本数据示例提取一条记录。
35490 <JOBP AllowExternal="1" name="JOBP.EXTRACTS_PHP_SSIS_POST_CORE#35490"> <PreCon><conditions id="CONDITIONS" /></PreCon>
这只是我要提取的列的一个子集。我基本上需要提取表中的所有列,包括 XML 定义的列,以将结果发送到本地驱动器上的输出表,而无需填充空格或截断数据。输出文件将是 XML 格式的文件。JOBP 列示例数据只是一个片段。实际数据包含几百行xml
节点。
我查看了很多关于如何提取节点和值的帖子,但我并没有尝试提取特定数据。我希望整个表创建一个 XML 输出文件。任何想法如何做到这一点?
解决方案
根据所需的输出,整个输出文件应为 XML 格式。它不能是与 XML 元素混合的部分 *.csv 文件。
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (
[col1] VARCHAR(4) NOT NULL,
[col2] INT NOT NULL,
[xmlinText] VARCHAR(190) NOT NULL,
[JOBP] XML NULL
);
INSERT INTO @tbl ([col1] ,[col2] ,[xmlinText] ,[JOBP])
VALUES
(
'Prod'
,35490
,'<JOBP AllowExternal="1" name="JOBP.EXTRACTS_PHP_SSIS_POST_CORE#35490"/>'
,'<PreCon><conditions id="CONDITIONS" /></PreCon>'
)
-- DDL and sample data population, end
SELECT col1, col2
, TRY_CAST([xmlinText] AS XML) AS [xmlinText]
, JOBP
FROM @tbl
FOR XML PATH('row'), TYPE, ROOT('root');
输出
<root>
<row>
<col1>Prod</col1>
<col2>35490</col2>
<xmlinText>
<JOBP AllowExternal="1" name="JOBP.EXTRACTS_PHP_SSIS_POST_CORE#35490" />
</xmlinText>
<JOBP>
<PreCon>
<conditions id="CONDITIONS" />
</PreCon>
</JOBP>
</row>
</root>
推荐阅读
- javascript - 加载 video.js 时出现奇怪的帧
- elasticsearch - 将 Elasticsearch 慢日志设置恢复为默认值
- angular - 无法在 amchart 中设置时间 HH:mm:ss?
- c++ - 用于强类型枚举的模板化运算符
- node.js - 从 Angular 前端到 json-server 的 GET 调用访问被 CORS 策略阻止的 XMLHttpRequest
- c# - 如何从 .net 核心应用程序中触发 IotEdge 模块上的计算?
- sql - 将变量和表参数之间的结果插入表中
- databricks - 如何以特定顺序使用 Databricks dbutilis 复制文件
- java - MouseHook 在 Mac OS X 上删除文本
- python - Python - 正则表达式 - 部分搜索模式在同一行,部分在下一行