关于SQL查询结果集转JSON字符串的问题

cucuw 2013-12-27 12:52:02
打算写个SQL函数,将任意一句查询SQL的记录集转为JSON格式字符串,遇到以下问题,请达人指点:

1、首先计划将查询结果集作为表值参数直接传递给函数,但是查询结果集的结构是不固定的,而作为函数参数的表值参数似乎必须是预先定义好的结构,这样就不能支持“任意”结果集了,如何解决?

2、对于一个查询结果集,如何获取它的所有字段名称及数据类型?

3、如果上述问题无法解决,是不是只能采用临时表?这样的话当大量并发访问的时候,临时表的创建和销毁是不是会给服务器造成很大负担?而且效率方面合不合算?
...全文
2333 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
frankyuJava 2016-03-24
  • 打赏
  • 举报
回复
昨天看到http://jaminquimby.com/servers/95-sql/sql-2008/145-code-tsql-convert-query-to-json参看一下。 楼主做出来了吗?
baidu_28966807 2015-06-12
  • 打赏
  • 举报
回复
用json处理表的多对多,还是用中间表呢,这是个问题 我喜欢用json,个人觉得中间表的增减太频繁了
嚣张的剑 2013-12-31
  • 打赏
  • 举报
回复
赞一个 这个帖不错
cucuw 2013-12-31
  • 打赏
  • 举报
回复
函数搞不定……最后还是用的存储过程和临时表…… 只能把最后生成的JSON存在一个全局临时表里,供跨域的调用……
發糞塗牆 2013-12-27
  • 打赏
  • 举报
回复
不会json,不过我觉得最好用编程语言来实现这些功能
LongRui888 2013-12-27
  • 打赏
  • 举报
回复
引用 12 楼 u013049181 的回复:
如果传输结构不固定的表值参数比较困难的话,那么就传递查询SQL也行,这种情况下,又要如何做呢?
呵呵,之前做过,把json转化为记录的,就是还没有做过反过来,把数据转为jason的
cucuw 2013-12-27
  • 打赏
  • 举报
回复
如果传输结构不固定的表值参数比较困难的话,那么就传递查询SQL也行,这种情况下,又要如何做呢?
cucuw 2013-12-27
  • 打赏
  • 举报
回复
函数的输出结果很确定,就是一个Nvarchar(Max),但是输入的参数有两个,第一个是个结构不固定表值参数(其结构由生成它的查询语句决定),第二个是生成的JSON变量名。 比如,函数名为tojson,查询记录集有三个字段"A"、"B"、"C",查询出了两条记录分别是1、2、3和a、b、c,要输出到JSON变量list1中,那么返回的结果就应该是: "list1":[{"A":"1","B":"2","C":"3"},{"A":"a","B":"b","C":"c"}] 如果查询记录集有两个字段"X"、"Y",查询出了三条记录分别是x1、y1;x2、y2和x3、y3,要输出到JSON变量List2中,那么返回的结果就应该是: "list2":[{"X":"x1","Y":"y1"},{"X":"x2","Y":"y2"},{"X":"x3","Y":"y3"}]
Mr_Nice 2013-12-27
  • 打赏
  • 举报
回复
引用 7 楼 u013049181 的回复:
补充说明一下,我是要在SQL Server中用TSQL写个函数直接输出JSON,而不是取个表给前端的程序去转。
lz给数据和要求的结果吧。
Mr_Nice 2013-12-27
  • 打赏
  • 举报
回复
引用 4 楼 DBA_Huangzj 的回复:
大神,你的球还没回来啊? [quote=引用 3 楼 OrchidCat 的回复:] [quote=引用 楼主 u013049181 的回复:] 打算写个SQL函数,将任意一句查询SQL的记录集转为JSON格式字符串,遇到以下问题,请达人指点: 1、首先计划将查询结果集作为表值参数直接传递给函数,但是查询结果集的结构是不固定的,而作为函数参数的表值参数似乎必须是预先定义好的结构,这样就不能支持“任意”结果集了,如何解决? 2、对于一个查询结果集,如何获取它的所有字段名称及数据类型? 3、如果上述问题无法解决,是不是只能采用临时表?这样的话当大量并发访问的时候,临时表的创建和销毁是不是会给服务器造成很大负担?而且效率方面合不合算?
前端有很多转的API啊。 参考http://json.codeplex.com/[/quote][/quote] 经测试,这个绿色的球,看来短期是回不来了....
LongRui888 2013-12-27
  • 打赏
  • 举报
回复
引用 7 楼 u013049181 的回复:
补充说明一下,我是要在SQL Server中用TSQL写个函数直接输出JSON,而不是取个表给前端的程序去转。
函数的输出,列是固定的,所以没办法实现你的需求的,所以还是建议用存储过程来实现把
cucuw 2013-12-27
  • 打赏
  • 举报
回复
补充说明一下,我是要在SQL Server中用TSQL写个函数直接输出JSON,而不是取个表给前端的程序去转。
KeepSayingNo 2013-12-27
  • 打赏
  • 举报
回复
你不需要获取表的列头啊,类型什么的,你从数据库里面取出的dataset里面本身就含有了列头信息,而且已经有直接转换为JSON格式的方法,不需要你去操心。在后台或者前端用JS都可以转。
t101lian 2013-12-27
  • 打赏
  • 举报
回复

function TableToJson(tableid) {

    var txt = "[";

    var table = document.getElementById(tableid);

    var row = table.getElementsByTagName("tr");

    var col = row[0].getElementsByTagName("th");

    for (var j = 1; j < row.length; j++) {

        var r = "{";

        for (var i = 0; i < col.length; i++) {

            var tds = row[j].getElementsByTagName("td");

            r += "\"" + col[i].innerHTML + "\"\:\"" + tds[i].innerHTML + "\",";

        }

        r = r.substring(0, r.length - 1)

        r += "},";

        txt += r;

    }

    txt = txt.substring(0, txt.length - 1);

    txt += "]";

    return txt; 

}
这是JS 的写法,,可以仿照这里
發糞塗牆 2013-12-27
  • 打赏
  • 举报
回复
大神,你的球还没回来啊?
引用 3 楼 OrchidCat 的回复:
[quote=引用 楼主 u013049181 的回复:] 打算写个SQL函数,将任意一句查询SQL的记录集转为JSON格式字符串,遇到以下问题,请达人指点: 1、首先计划将查询结果集作为表值参数直接传递给函数,但是查询结果集的结构是不固定的,而作为函数参数的表值参数似乎必须是预先定义好的结构,这样就不能支持“任意”结果集了,如何解决? 2、对于一个查询结果集,如何获取它的所有字段名称及数据类型? 3、如果上述问题无法解决,是不是只能采用临时表?这样的话当大量并发访问的时候,临时表的创建和销毁是不是会给服务器造成很大负担?而且效率方面合不合算?
前端有很多转的API啊。 参考http://json.codeplex.com/[/quote]
Mr_Nice 2013-12-27
  • 打赏
  • 举报
回复
引用 楼主 u013049181 的回复:
打算写个SQL函数,将任意一句查询SQL的记录集转为JSON格式字符串,遇到以下问题,请达人指点: 1、首先计划将查询结果集作为表值参数直接传递给函数,但是查询结果集的结构是不固定的,而作为函数参数的表值参数似乎必须是预先定义好的结构,这样就不能支持“任意”结果集了,如何解决? 2、对于一个查询结果集,如何获取它的所有字段名称及数据类型? 3、如果上述问题无法解决,是不是只能采用临时表?这样的话当大量并发访问的时候,临时表的创建和销毁是不是会给服务器造成很大负担?而且效率方面合不合算?
前端有很多转的API啊。 参考http://json.codeplex.com/
LongRui888 2013-12-27
  • 打赏
  • 举报
回复
这个建议直接用存储过程来做。 另外,由于临时表是放在tempdb数据库中的,所以临时表的开销,可以通过在tempdb中多添加几个文件,来适当的降低临时表的开销的,另外,适当增大文件的大小。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧