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变量的值