SQL-如何为XML PATH的动态列提供参数

时间:2019-02-01 13:42:58

标签: sql-server tsql

具有4列(journeyId,journeydate,elementid,channelid),但我只想在select for XML路径中包含具有值的列(journeyid是必须具有值)。但是,我没有获得xml格式的值,而是得到了列名作为结果。

Declare @JourneyDate datetime='2019-01-22 12:15:36.380'
Declare @ElementID varchar(50)=''
Declare @ChannelID varchar(50)=''
Declare @JourneyID varchar(50)='58597F9C-C468-4E30-A481-3B21170F9E63'
Declare @Selects varchar(2000)='JourneyID'
Declare @Addstate xml
Declare @sql nvarchar(max)

if @JourneyDate is not null
begin
set @Selects = @Selects + ',JourneyDate'
end 

if isnull(@ElementID,'')<>''
begin
set @Selects = @Selects + ',ElementID'
end 

if isnull(@ChannelID,'')<>''
begin
set @Selects = @Selects + ',ChannelID'
end 


set @Addstate=(Select @Selects
               FROM [tbl_Journey]
               where JourneyID= @JourneyID
               FOR XML PATH('root'))

select @Addstate


Result:
<root>JourneyID,JourneyDate</root>

But what I need is below results:
<root><JourneyID>58597F9C-C468-4E30-A481-3B21170F9E63</JourneyID><JourneyDate>2019-01-22T12:15:36.380</JourneyDate></root>

2 个答案:

答案 0 :(得分:0)

xml应该以如下方式动态形成,这会将变量值添加到xml

master

答案 1 :(得分:0)

生成并执行动态语句。使用您的语句,为表中的每一行(而不是列值)选择了@Selects变量的值。

...
DECLARE @stm nvarchar(max)
SET @stm = N'
    SET @Addstate = (
            SELECT ' + @Selects + N' FROM [tbl_Journey] 
            WHERE JourneyID = @JourneyID
            FOR XML PATH(''root'')
    )
'
EXEC sp_executesql @stm, N'@Addstate xml OUTPUT, @JourneyID varchar(50)', @Addstate OUTPUT, @JourneyID
SELECT @Addstate