首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 记录转化为字符串 [已结贴,结贴人:kdymh]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-22 14:52:22 楼主
    create table temptable
    (
    a int,
    b varchar(10),
    c varchar(10),
    d varchar(10)
    )


    insert into temptable values(1,'我1','是1','谁1')
    insert into temptable values(2,'我2','是2','谁2')
    insert into temptable values(3,'我3','是3','谁3')
    insert into temptable values(4,'我4','是4','谁4')

    select * from temptable

    然后把记录转化成如下格式
    a=1,b=我1,c=是1,d=谁1,a=2,b=我2,c=是2,d=谁2,a=3,b=我3,c=是3,d=谁3,a=4,b=我4,c=是4,d=谁4
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-22 14:54:271楼 得分:0
    这一过程要在存储过程中完成
    执行效率尽可能的高点

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-22 14:55:502楼 得分:1
    SQL code
    declare @s varchar(8000) select @s = isnull(@s,'')+'a='+ltrim(a)+',b='+b+',c='+c+',d='+d from temptable select @s
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-22 14:56:203楼 得分:1
    SQL code
    declare @s varchar(8000) select @s = isnull(@s+',','')+'a='+ltrim(a)+',b='+b+',c='+c+',d='+d from temptable select @s
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-22 14:57:064楼 得分:1
    SQL code
    create table temptable ( a int, b varchar(10), c varchar(10), d varchar(10) ) insert into temptable values(1,'我1','是1','谁1') insert into temptable values(2,'我2','是2','谁2') insert into temptable values(3,'我3','是3','谁3') insert into temptable values(4,'我4','是4','谁4') declare @str varchar(1000) set @str='' select @str=@str+'a='+cast(a as varchar(12))+',b='+b+',c='+c+',d='+d+',' from temptable select left(@str,len(@str)-1) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- a=1,b=我1,c=是1,d=谁1,a=2,b=我2,c=是2,d=谁2,a=3,b=我3,c=是3,d=谁3,a=4,b=我4,c=是4,d=谁4 (1 行受影响)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    发表于:2008-04-22 14:59:025楼 得分:2
    参考如下:

    /*如何将一列中所有的值一行显示
    数据源
      a
      b
      c
      d
      e
    结果
    a,b,c,d,e
    */

    create table tb(col varchar(20))
    insert tb values ('a')
    insert tb values ('b')
    insert tb values ('c')
    insert tb values ('d')
    insert tb values ('e')
    go

    --方法一
    declare @sql varchar(1000)
    set @sql = ''
    select @sql = @sql + t.col + ',' from (select col from tb) as t
    set @sql='select result = ''' + @sql + ''''
    exec(@sql)
    /*
    result   
    ----------
    a,b,c,d,e,
    */

    --方法二
    declare @output varchar(8000)
    select @output = coalesce(@output + ',' , '') + col from tb
    print @output
    /*
    a,b,c,d,e
    */

    drop table tb
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-22 14:59:246楼 得分:1
    SQL code
    if object_id('tempdb.dbo.#T') is not null drop table #T create table #T ( a int, b varchar(10), c varchar(10), d varchar(10) ) set nocount on insert into #T values(1,'我1','是1','谁1') insert into #T values(2,'我2','是2','谁2') insert into #T values(3,'我3','是3','谁3') insert into #T values(4,'我4','是4','谁4') declare @sql nvarchar(max) select @sql=isnull(@sql+char(10),'')+'a='+ltrim(a)+',b='+b+',c='+c+',d='+d from #T print @SQL /* a=1,b=我1,c=是1,d=谁1 a=2,b=我2,c=是2,d=谁2 a=3,b=我3,c=是3,d=谁3 a=4,b=我4,c=是4,d=谁4 */ set nocount off
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-22 15:18:197楼 得分:0
    声明一点,temptable只是假设中的一个表,实际上表是动态的,即不能确定及明的确定每张表上的字段
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-22 15:20:488楼 得分:0
    5楼的可以,但是还有一点没有合要求
    就是我要明确这个值是哪个字段的
    a=1,b=我1,c=是1,d=谁1,a=2,b=我2,c=是2,d=谁2,a=3,b=我3,c=是3,d=谁3,a=4,b=我4,c=是4,d=谁4
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-22 15:34:059楼 得分:13
    SQL code
    create table temptable ( a int, b varchar(10), c varchar(10), d varchar(10) ) insert into temptable values(1,'我1','是1','谁1') insert into temptable values(2,'我2','是2','谁2') insert into temptable values(3,'我3','是3','谁3') insert into temptable values(4,'我4','是4','谁4') declare @sql varchar(8000) set @sql='' select @sql=@sql+''','+name+'='''+'+cast('+name+' as varchar(8000))+' from syscolumns where id=object_id('temptable') order by colid select @sql='declare @str varchar(8000) set @str=''''select @str=@str+'+stuff(stuff(@sql,len(@sql),1,''),2,1,'')+' from temptable select @str' exec(@sql) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- a=1,b=我1,c=是1,d=谁1a=2,b=我2,c=是2,d=谁2a=3,b=我3,c=是3,d=谁3a=4,b=我4,c=是4,d=谁4 (1 行受影响)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-22 17:22:0610楼 得分:0
    楼上的正解

    但是我想把结果存放在一个字串变量中,应该如何做呢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-22 17:30:2211楼 得分:0
    引用 10 楼 kdymh 的回复:
    楼上的正解

    但是我想把结果存放在一个字串变量中,应该如何做呢


    SQL code
    declare @sql varchar(8000) set @sql='' select @sql=@sql+''','+name+'='''+'+cast('+name+' as varchar(8000))+' from syscolumns where id=object_id('temptable') order by colid select @sql='declare @str varchar(8000) set @str=''''select @str=@str+'+stuff(stuff(@sql,len(@sql),1,''),2,1,'')+' from temptable select @str' exec(@sql)


    就这段不用exec了
    用 SP_EXECUTESQL 这个来可以带返回值的动态执行SQL
    得到返回的字符串
    快下班了 楼主自己看下吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-22 17:55:3512楼 得分:0
    刚刚看了这个函数,没有看到哪里返回了字符串,请kk19840210帮帮忙
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-22 18:45:4713楼 得分:1
    select columns
    from tbl
    for xml path('')
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved