我有一个返回行的查询
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>
有没有办法做到这一点?谢谢!
答案 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