【发布时间】:2011-03-21 15:09:15
【问题描述】:
我在 SQL Server 中有一个 XML 列,其中包含一个 SQL where 子句。 我想用查询结果替换特定的子字符串。 在下面的示例中,我想将 p.[EconPeriodID] = 4 替换为 EconPeriod = 'Jan 2011' 并将 p.[BookID] = 2 替换为 Book = 'Canada'
<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
更新: 我在使用交叉应用和更改保存的查询以使用人类可读的参数之间进行辩论。 Cross Apply 可以让我在查询中多次引用 XML 碎片,以便与 Replace 一起使用。
【问题讨论】:
-
如果要更新 SQL-Server 中的 XML 实例,则必须使用一些非 SQL 标准函数或使用供应商特定的 XML DML 语言。 SQL-Server 不支持 XQuery 更新工具,也不完全支持 XQuery。
标签: sql-server sql-server-2005 sql-server-2008 xml-dml