具有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>
答案 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