【发布时间】:2019-06-11 02:23:23
【问题描述】:
我遇到了类似的问题(请参阅下面的错误消息)。我正在为 SQL Server 数据库中的特定单词搜索存储过程。拉取结果集为objectName、ObjectType 和ObjectText(其中存在搜索词)。我正在尝试将ObjectText 作为 XML 表单,以便可以单击以直接从结果集中打开。它适用于触发器,但不适用于存储过程,因为在转换为 XML 格式时似乎面临非法字符。
我尝试了网上提供的一些建议,例如转换/转换/替换统一字符、XML、ascii 等,并替换非法字符,例如 &#xD、&#xA、&#x9,但没有成功。
SELECT
o.name as 'ObjectName',
CASE o.xtype
WHEN 'C' THEN 'CHECK constraint '
WHEN 'D' THEN 'Default or DEFAULT constraint'
WHEN 'F' THEN 'FOREIGN KEY constraint'
WHEN 'FN' THEN 'Scalar function'
WHEN 'IF' THEN 'In-lined table-function'
WHEN 'K' THEN 'PRIMARY KEY or UNIQUE constraint'
WHEN 'L' THEN 'Log'
WHEN 'P' THEN 'Stored procedure'
WHEN 'R' THEN 'Rule'
WHEN 'RF' THEN 'Replication filter stored procedure'
WHEN 'S' THEN 'System table'
WHEN 'TF' THEN 'Table function'
WHEN 'TR' THEN 'Trigger'
WHEN 'U' THEN 'User table'
WHEN 'V' THEN 'View'
WHEN 'X' THEN 'Extended stored procedure'
ELSE o.xtype
END as 'ObjectType',
CAST(c.text as XML) as 'SearchObject'
FROM
syscomments c
INNER JOIN
sysobjects o ON c.id = o.id
LEFT JOIN
sysobjects p ON o.Parent_obj = p.id
WHERE
o.xtype = 'P'
AND (c.text LIKE '%loan_timestamp%' OR
c.text LIKE '%aclk_timestamp%' OR
c.text LIKE '%addr_timestamp%')
错误:
消息 9455,第 16 层,状态 1,第 121 行
XML解析:第44行,第28个字符,非法限定名字符
CAST(c.text as XML) AS 'SearchObject'
此列应生成可点击的 XML,以便可以直接从结果集中打开存储过程/触发器。
【问题讨论】:
标签: sql sql-server xml