Sql 变量不起作用的XML查询
第一个返回:Sql 变量不起作用的XML查询,sql,sql-server,xml,tsql,Sql,Sql Server,Xml,Tsql,第一个返回: declare @xml xml = '<ChangeSet DBSchemaVersion="2.0.0.88" DBSyncVersion="15" ScopeId="1"> <C op="I" PK="44"> <User UserId="44" Role="3" UserName="Dummy1" /> </C> <C op="I" PK="45"> <User UserId="
declare @xml xml =
'<ChangeSet DBSchemaVersion="2.0.0.88" DBSyncVersion="15" ScopeId="1">
<C op="I" PK="44">
<User UserId="44" Role="3" UserName="Dummy1" />
</C>
<C op="I" PK="45">
<User UserId="45" Role="3" UserName="Dummy2" />
</C>
<C op="I" PK="46">
<User UserId="46" Role="3" UserName="Dummy3" />
</C>
</ChangeSet>'
-- this works fine
SELECT [SyncTable].Col.query('User')
FROM @xml.nodes('/ChangeSet/C[@op=''I'']') as [SyncTable](Col)
FOR XML AUTO
-- this does not work
DECLARE @tableName NVARCHAR(MAX) = 'User'
SELECT [SyncTable].Col.query('sql:variable(''@tableName'')')
FROM @xml.nodes('/ChangeSet/C[@op=''I'']') as [SyncTable](Col)
FOR XML AUTO
第二个返回:
<SyncTable><User UserId="44" Role="3" UserName="Dummy1"/></SyncTable><SyncTable><User UserId="45" Role="3" UserName="Dummy2"/></SyncTable><SyncTable><User UserId="46" Role="3" UserName="Dummy3"/></SyncTable>
我试图在表名是参数的过程中实现这一点。有没有办法实现我想要实现的目标?
SQL Server 2008 R2
TIA作为文本字符串传递给xquery表达式的SQL变量值,而AFAICS无法将文本字符串作为xquery/xpath步骤表达式注入 然而,有一种方法可以解决这个问题,即,过滤名为的元素等于特定的字符串。这里,specific string是来自SQL变量的文本字符串,例如:
<SyncTable>User</SyncTable><SyncTable>User</SyncTable><SyncTable>User</SyncTable>
此部分*[local name=sql:variable@tableName]读取:选择当前上下文元素的任意子元素,其局部名称等于@tableName变量的值。SQL变量值作为文本字符串传递给xquery表达式,AFAICS无法将文本字符串作为xquery/xpath步骤表达式注入 然而,有一种方法可以解决这个问题,即,过滤名为的元素等于特定的字符串。这里,specific string是来自SQL变量的文本字符串,例如:
<SyncTable>User</SyncTable><SyncTable>User</SyncTable><SyncTable>User</SyncTable>
此部分*[local name=sql:variable@tableName]读取:选择当前上下文元素的任意子元素,其局部名称等于@tableName变量的值