SQL Server中的动态select子句来自XML

时间:2010-04-20 07:15:10

标签: sql-server sql-server-2008

我必须查询一个视图,并且只包含那些在XML中定义的列,这些列作为我的SP的参数。我可以在select子句中包含该XML并提取该XML中定义的所有列。请告诉你这样做的方法。

XML格式是

 <Columns>
   <Column Name="CustomerID"/>
   <Column Name="CustomerName"/>
   <Column Name="Customerstate"/>
 </Columns>

我想将这些列放在选择列表中。

 SELECT row.value('@Name', 'varchar(200)')
 FROM   @varXML.nodes('Columns/Column') AS d (row) FROM JobListingDetails

1 个答案:

答案 0 :(得分:0)

我不确定为什么要这样做而不是允许客户端应用程序为自己过滤行,但是如果必须这样做,则需要动态SQL:

DECLARE @varXML XML
DECLARE @columnList NVARCHAR(MAX)

SET @varXML = 
' <Columns>
   <Column Name="CustomerID"/>
   <Column Name="CustomerName"/>
   <Column Name="Customerstate"/>
 </Columns>
'

SET @columnList = 
 (SELECT row.value('@Name', 'varchar(200)') + ','
  FROM   @varXML.nodes('Columns/Column') AS d (row)
  FOR XML PATH('')
 )

--SELECT @columnList

SET @columnList = 'SELECT ' + LEFT(@columnList, LEN(@columnList) - 1) + ' FROM JobListingDetails'

EXEC sp_executesql @columnList