我需要将数据库中所有存储过程的文本存储为 XML 数据类型。当我使用时,FOR XML PATH
存储过程中的文本包含序列化数据字符,例如
CRLF

和"
等。我需要将文本存储在没有这些字符的 xml 结构中,因为需要使用文本来重新创建存储过程.
这是我使用的查询FOR XML PATH
:
SELECT
[View].name AS "@VName", [Module].definition AS "@VDefinition"
FROM
sys.views AS [View]
INNER JOIN
sys.sql_modules AS [Module] ON [Module].object_id = [View].object_id
FOR XML PATH ('View'), TYPE
我读到我应该CDATA
使用FOR XML EXPLICIT
. 但是,当我运行以下查询并查看 XML 数据时,它的输出中也包含这些字符。我需要文本是没有这些字符的纯文本。
这是我的查询:
SELECT
1 AS Tag,
0 AS Parent,
NULL AS [Database1!1],
NULL AS [StoredProcedure!2!VName],
NULL AS [StoredProcedure!2!cdata]
UNION ALL
SELECT
2 AS Tag,
1 AS Parent,
NULL,
[StoredProcedure].name as [StoredProcedure!2!!CDATA],
[Module].definition as [StoredProcedure!2!!CDATA]
FROM
sys.procedures AS [StoredProcedure]
INNER JOIN
sys.sql_modules [Module] ON [StoredProcedure].object_id = [Module].object_id
WHERE
[StoredProcedure].name NOT LIKE '%diagram%'
FOR XML EXPLICIT
如何以纯文本形式存储存储过程的文本?或者当我解析 xml 数据类型以重新创建存储过程时,我可以反序列化它以使其没有这些字符吗?
理想情况下,我想使用FOR XML PATH
,但如果不可能,我会使用FOR XML EXPLICIT
.