我正面临类似的问题(请参见下面的错误消息)。我正在搜索存储过程中SQL Server数据库中的特定单词。提取结果集为mysql> delete from django_migrations where id=361;
,objectName
和ObjectType
(存在搜索词)。我正在尝试将ObjectText
作为XML格式,以便可以单击以直接从结果集中打开。它可以与触发器配合使用,但不能与存储过程配合使用,因为在转换为XML格式时似乎面临非法字符。
我尝试了网上提供的一些建议,例如强制转换/转换/替换统一字符,XML,ASCII等,并替换了ObjectText
,
,

等非法字符,但没有成功。
	
错误:
9455消息,第16级,状态1,第121行
XML解析:第44行,字符28,非法的限定名称字符
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%')
此列的结果应为可点击的XML,因此可以直接从结果集中打开存储过程/触发器。
答案 0 :(得分:1)
如果我正确理解了这一点,则您不会向我们显示您的列__consumer_offsets
可能包含的内容,但是向我们显示了一个相当大的查询,与您的问题无关...
如果我正确理解了这一点,则希望将c.text
作为可点击XML包含在结果集中。尽管格式不正确,但有效的XML(或至少在所有情况下都无效)。
两种方法:
c.text
而不是TRY_CAST
返回NULL CAST
第一个不会引发错误,但不会使您高兴。 (SELECT c.text AS [*] FOR XML PATH(''),TYPE) AS SearchObject
,&
或<
(以及许多其他禁止的字符)的出现将迫使其显示为NULL ...
第二个将获取列内容,并将为您隐式进行所有转义。请注意,在XML查看器中,您将看到转义的序列而不是禁止的字符