我有一个存储多个值的表,我想在 Xquery 中使用这些值在另一个表中查找与结果匹配的数据。Xquery 字符串被构建为在使用 评估时返回真或假xmlData.Exists(value)
。这是我到目前为止所拥有的:
存储过程:
ALTER PROCEDURE [XquerySearch]
@xquery nvarchar(4000)
DECLARE
@sqlcmd NVARCHAR(MAX),
@SafeXquery NVARCHAR(4000)
SET @SafeXquery = REPLACE(@xquery, '''', '''''')
SET @sqlcmd = N'SELECT d.[guid], p.pGuid,
FROM Data AS d
LEFT OUTER JOIN PDataLink as p on d.[guid] = p.pGuid
WHERE d.xmlData.exist(''' + @SafeXquery + ''') = 1';
exec (@sqlcmd)
以上是我发现能够使用动态值作为搜索参数(不是正在搜索的实际字段)运行 xquery 的唯一方法。
好的,现在假设我有另一个名为 的存储过程RunQuery
,它正在构建一个搜索其他参数的结果集,例如creationDate。我不知道如何使用XquerySearch
上面的存储过程来提供满足我的其他条件和 Xquery 条件的最终结果集。
存储过程:
ALTER PROCEDURE [RunQuery]
@queryid int
DECLARE @ideaTestingTable table ( pGuid uniqueidentifier)
~*****~
SELECT Distinct p.guid
FROM Parent p
LEFT OUTER JOIN PDataLink pdl ON p.[guid] = pdl.pGuid
LEFT OUTER JOIN Data d ON pdl.dataGuid = d.[guid]
CROSS JOIN QueryParams q
WHERE q.id = @queryid
AND ~My other search parameters are true~
AND ~*****~
~ * **** ~ = 我怎样才能建立一个临时表,其中有一个pGuid
匹配的列表d.xmlData
(可能调用 XquerySearch 存储过程)然后添加where
到底部AND p.[guid] IN @ideaTestingTable
或以某种方式运行 xquery直接来自 where 子句。