将SELECT *查询转换为字符串

时间:2020-02-08 19:11:12

标签: sql sql-server

我有一个返回行的查询

table

我想将结果保存到nvarchar sql变量中。我见过类似的问题Convert SQL Server result set into string,但它们仅将select与列名一起使用,从未与*一起使用。

SELECT *
FROM table
WHERE id = 1;

但是答案是select * from table where id = 1 for xml path ('') ,我只希望它是<column1>value1</column1> <column2>value2</column2>

有没有办法做到这一点?谢谢!

3 个答案:

答案 0 :(得分:1)

如果打开辅助功能。

这实际上会将任何行,表或查询转换为字符串(是否定界)。

在以下示例中,我选择了带有CRLF行终止符的PIPE分隔符。

请注意,render() { const { doc } = this.props; return ( <List component="nav" aria-labelledby="nested-list-subheader" subheader={ <ListSubheader component="div" id="nested-list-subheader"> {doc.title} </ListSubheader> } className="font-weight-bolder" > {doc.subTopics.map(x => ( <div> <ListItem button key={x.id} onClick={this.handleClick} > <ListItemText primary={x.title} /> {this.state.open ? <ExpandLess /> : <ExpandMore />} </ListItem> <Collapse key={x.id} in={this.state.open} timeout='auto' unmountOnExit > { x.subSubTopics.map(toc => { return ( this.state.urls.push(toc.url), <List component='li' disablePadding key={x.id} primary={x.title}> <div> <ListItem button key={toc.header} primary={toc.header}> <ListItemIcon> {toc.technicalformat == "video" ? <i className="fa fa-play-circle"></i> : null} </ListItemIcon> <ListItemText key={toc.header} primary={toc.header} onClick={() => { this.changeTopicTitle(toc.header, x.title) }} /> </ListItem> <Divider /> </div> </List> ); })} </Collapse> </div> ))} </List> 在需要行终止符时的用法和位置。另请注意_RN ...这将包含空值作为空字符串。如果要排除空值,只需省略,ELEMENTS XSINIL

示例为整个表或dbFiddle

,ELEMENTS XSINIL

返回

Declare @YourTable Table (id int,[col_1] varchar(50),[col_2] varchar(50),[col_3] varchar(50),[col_n] varchar(50))  Insert Into @YourTable Values 
 (1,'data1','data2','data3','data4')
,(2,'data5','data6','data7','data8')

-- Entire Table 
Declare @XML xml = (Select *,_RN=Row_Number() over (Order By (Select null)) From @YourTable for XML RAW,ELEMENTS XSINIL )
Select [dbo].[svf-str-Data-To-Delimited]('|',char(13)+char(10),@XML)

基于行的示例

1|data1|data2|data3|data4
2|data5|data6|data7|data8

返回

Select A.ID
      ,AsAString = [dbo].[svf-str-Data-To-Delimited]('|',char(13)+char(10),B.XMLData)
 From  @YourTable A
Cross Apply ( values ( (select a.* for xml RAW,ELEMENTS XSINIL )) )B(XMLData)

感兴趣的功能

ID  AsAString
1   1|data1|data2|data3|data4
2   2|data5|data6|data7|data8

答案 1 :(得分:0)

您可以轻松地将结果存储为XML字符串:

select *
from (values (1, 'x', getdate())) v(id, a, b)
where id = 1
for xml path ('');

或作为JSON字符串:

select *
from (values (1, 'x', getdate())) v(id, a, b)
where id = 1
for json auto;

答案 2 :(得分:0)

例如,如果您不介意对SQL Server使用动态SQL(和INFORMATION_SCHEMA词典),则可以使用该功能:

DECLARE @sql nvarchar(max) = '', @result nvarchar(max), @id int = 1 SELECT @sql += '+'',''+convert(nvarchar,' + QUOTENAME(column_name) +')' from INFORMATION_SCHEMA.columns where table_name = 'Student' SET @sql = 'select @result=' + stuff(@sql,1,5,'') + ' from student where id = ' + CAST(@id as nvarchar) EXECUTE sp_executesql @sql, N'@result nvarchar(max) OUTPUT', @result=@result OUTPUT SELECT @result as MyOutput

相关问题