我想在SQL Server中创建这个存储过程:
create procedure Test
@pathToElement nvarchar(50),
@value nvarchar(50)
as
select top 10 *
from MyTable
where SerializedXml.exist('@pathToElement[text() = @value]') = 1;
SerializedXml
是xml
中的MyTable
列。
我收到以下错误:
不支持顶级属性节点
答案 0 :(得分:0)
一种简单的方法是使其成为动态查询,例如:
CREATE TABLE #t(id INT IDENTITY(1,1),SerializedXml XML);
INSERT INTO #t(SerializedXml)VALUES
('<FormResults> <ID>00008</ID> <LocationID>42</LocationID> <LastSaveDate>2016-09-10T21:21:36</LastSaveDate> <Data> <txtSerGen>YY</txtSerGen> <txtGen>0602</txtGen> <txtYear>2016</txtYear> </Data> </FormResults>'),
('<FormResults> <ID>00008</ID> <LocationID>42</LocationID> <LastSaveDate>2016-09-10T21:21:36</LastSaveDate> <Data> <txtGen>0602</txtGen> <txtYear>2016</txtYear> </Data> </FormResults>');
DECLARE @pathToElement NVARCHAR(4000)='FormResults/Data/txtSerGen';
DECLARE @value NVARCHAR(4000)='YY';
DECLARE @dsql NVARCHAR(MAX) ='
select top 10 *
from #t
where
SerializedXml.exist('''+@pathToElement+'[(text()[1]) = "'+REPLACE(@value,'''','''''')+'"]'') = 1;';
EXEC sp_executesql @dsql;
DROP TABLE #t;
这将仅选择第一行。