如何用SQL Server中的查询结果替换XML子字符串?
我在SQL Server中有一个包含SQL where子句的XML列。 我想用查询结果替换特定的子字符串。 在下面的例子中,我想替换页。[EconPeriodID] = 4 EconPeriod = '2011年1月' 和替换页。[的BookID] = 2与预订= '加拿大'如何用SQL Server中的查询结果替换XML子字符串?
<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
更新: 我使用跨应用和更改保存的查询使用人类可读的PARAMS之争。 Cross Apply允许我在查询中多次引用XML Shred,以便与Replace一起使用。
所以你要返回WHERE子句作为一个字符串?你不是试图更新XML列中的值,只是返回一个修改后的值?
你能做这样的事吗?
WITH A AS
( your query minus the ORDER BY clause)
SELECT Name
, submit_time
, request
, [EOD Date]
, [WHERE Clause] = REPLACE(A.[WHERE Clause], 'p.[EconPeriod] = 4','[EconPeriod] = ''Jan 2011''')
FROM A
ORDER BY submit_time DESC
Ann:我想返回的修改值是另一个查询的结果,它基于XML中的id和表。 例如:从econperiod中选择姓名,其中id = 4 或者它可以是选择书籍中的姓名,其中id = 21 – 2011-04-12 13:26:36
因此,如果您将REPLACE语句视为REPLACE(A,B,C)知道B或C直到运行时?它们可能因记录而异? – 2011-04-13 15:29:11
如果要更新SQL-Server中的XML实例,则必须使用某些没有SQL标准功能或使用供应商特定的XML DML语言。 SQL-Server不支持XQuery更新工具,既不完全支持XQuery。 – 2011-03-22 02:59:30