Я столкнулся с подобной проблемой (см. Сообщение об ошибке ниже). Я ищу хранимые процедуры для конкретного слова в базе данных SQL Server. Наборы результатов извлечения: objectName
, ObjectType
и ObjectText
(в которых существует искомое слово). Я пытаюсь вывести ObjectText
в виде XML-формы, чтобы ее можно было щелкнуть, чтобы открыть непосредственно из наборов результатов. Он отлично работает с триггерами, но не с хранимыми процедурами, поскольку при преобразовании в форму XML кажется, что он сталкивается с недопустимыми символами.
Я испробовал несколько предложений, предложенных в сети, таких как приведение / преобразование / замена унифицированных символов, XML, ascii и т. Д., И замена недопустимых символов, таких как 
, 

, 	
, но безуспешно.
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, поэтому хранимые процедуры / триггеры можно открывать непосредственно из наборов результатов.