У меня есть столбец XML в SQL Server, содержащий предложение SQL where. Я хотел бы заменить определенные подстроки на результаты запроса. В приведенном ниже примере я хочу заменить р. [EconPeriodID] = 4 с EconPeriod = 'Jan 2011' и заменить р. [BookID] = 2 с Book = 'Canada'Как заменить подстроку XML на результаты запроса в SQL Server?
<Parameter Name="whereClause"
BaseType="nvarchar"
Precision="0"
Scale="0"
MaxLength="64"
>WHERE (p.[EconomicPeriodID] = 4 and p.[BookID] = 2)</Parameter>
Я не использую поиск CrossApply, потому что я возвращаю несколько сообщений с разными параметрами.
Полного запрос ниже:
DECLARE @sdt_Date DATETIME
SET @sdt_Date = '3/17/2011'
SELECT name ,
submit_time ,
request,
CONVERT(VARCHAR, request.value(N'
(for $A in /ServiceProxy/Event/Parameters/Parameter
where $A/@Name ="valuationDate"
return $A/text())[1]
', 'datetime'), 111)
AS 'EOD Date' ,
request.query(N'
for $A in /ServiceProxy/Event/Parameters/Parameter
where $A/@Name ="whereClause"
return $A/text()
').value('.', 'varchar(max)') AS 'WHERE Clause'
FROM Requests
WHERE submit_time BETWEEN DATEADD(dd, 0,
DATEDIFF(dd, 0,
@sdt_Date))
AND DATEADD(dd, 1,
DATEDIFF(dd, 0,
@sdt_Date))
ORDER BY submit_time DESC
Update: Я обсуждаю между использованием Cross Применить и изменение сохраненного запроса использовать считываемые Params человека. Cross Apply позволит мне ссылаться на XML-фрагмент несколько раз в запросе, для использования с Replace.
Если вы хотите обновить экземпляр XML в SQL-Server, вы должны использовать некоторую стандартную функцию SQL или использовать специфический для поставщика язык XML DML. SQL-Server не поддерживает средство обновления XQuery, не полностью поддерживает XQuery. –