Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql将列值返回到逗号分隔的字符串中_Sql_Sql Server_Json - Fatal编程技术网

sql将列值返回到逗号分隔的字符串中

sql将列值返回到逗号分隔的字符串中,sql,sql-server,json,Sql,Sql Server,Json,如何将返回的列转换为逗号分隔的字符串?我试图使用@sql,但必须手动键入值 declare @orderId as int, @sql AS VARCHAR(MAX) set @orderId = 10 set @sql = 'select orderId, categoryId, itemId from Orders where orderId = ' + CONVERT(varchar(10), @orderId) --select @sql as 'sql stmt' --select o

如何将返回的列转换为逗号分隔的字符串?我试图使用@sql,但必须手动键入值

declare @orderId as int, @sql AS VARCHAR(MAX)
set @orderId = 10
set @sql = 'select orderId, categoryId, itemId from Orders where orderId = ' + CONVERT(varchar(10), @orderId)
--select @sql as 'sql stmt' --select orderId, categoryId, itemId from Orders where orderId = 10
--execute(@sql) 
--will return as:
--orderId categoryId itemId
--10 281 1054
declare @dt table(orderId varchar(10), categoryId varchar(10), itemId varchar(10))
--insert @dt values (@sql)
insert @dt values ('10','281','1054') -- did this to get results but want to use @sql
--how to get the @sql to be a string as '10','281','1054'
select '{"orderinfo" : [' + STUFF((
    select 
        ',{"Order Id":' + orderId
        + ',"Category Id":' + categoryId
        + ',"Item Id":' + itemId
        +'}'

    from @dt
    for xml path(''), type
 ).value('.', 'varchar(max)'), 1, 1, '') + ']}' as jsonData
--end results: {"orderinfo" : [{"Order Id":10,"Category Id":281,"Item Id":1054}]}

我最感兴趣的是返回json格式的数据。

我建议您创建一个标量函数,该函数使用游标获取并构建一个描述的字符串

declare @orderId as int, @sql AS VARCHAR(MAX)
set @orderId = 10
set @sql = 'select orderId, categoryId, itemId from Orders where orderId = ' + CONVERT(varchar(10), @orderId)

declare @dt table(orderId varchar(10), categoryId varchar(10), itemId varchar(10))


 insert into @dt  exec(@sql)
-- this is what you needed


select '{"orderinfo" : [' + STUFF((
    select 
        ',{"Order Id":' + orderId
        + ',"Category Id":' + categoryId
        + ',"Item Id":' + itemId
        +'}'

    from @dt
    for xml path(''), type
 ).value('.', 'varchar(max)'), 1, 1, '') + ']}' as jsonData
--end results: {"orderinfo" : [{"Order Id":10,"Category Id":281,"Item Id":1054}]}

然后在查询的select上调用您的函数。

我建议您创建一个标量函数,该函数使用一个游标来获取和构建一个描述的字符串


然后在查询的select上调用函数。

非常感谢-我真不敢相信我没有想到insert into。。。执行的变量——duhHappens一直存在!开发者区块:)谢谢你接受这个答案。也请考虑投票的答案。非常感谢-我不敢相信我没有想到插入…执行的变量——duhHappens一直存在!开发者区块:)谢谢你接受这个答案。也请考虑投票表决的答案。