回 帖 发 新 帖 刷新版面

主题:如何构造这个INSERT 语句,超级难题

我要把对某个表的查询的多条记录(select语句查出的记录),连接成字符串,插入另外一个表的某个字段, 应该怎么写SQL 语句 

以下是表1结构 
CREATE TABLE [dbo].[historyInfo] (
    [userName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [countIp] [int] NULL ,
    [begin_date] [datetime] NOT NULL 
) ON [PRIMARY]
GO

以下表2 结构
CREATE TABLE [dbo].[info] (
    [ID] [int] IDENTITY (1, 1) NOT NULL ,
    [timu] [nvarchar] (150) COLLATE Chinese_PRC_CI_AS NULL ,
    [neirong] [ntext] COLLATE Chinese_PRC_CI_AS NULL ,
    [riqi] [smalldatetime] NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO


比如我从 表一获得3条记录
那么我要把这3条记录合理的相连 ,然后插入到表2 的neirong 字段(一条记录记完)

除了使用变量来接收表一的每个字段的值 外,还有什么方法呢?

比如我使用 select * from historyInfo 获得 
xinxin    30    2006-09-10 00:00:00.000
ttt    15    2006-09-10 00:00:00.000
ffwe    44    2006-09-10 00:00:00.000

 那么我要在 表2 的neirong 字段 中写入:
姓名:xinxin 使用了 30 次, 时间:2006-09-10 00:00:00.000
姓名:ttt 使用了 15 次, 时间:2006-09-10 00:00:00.000
姓名:ffwe 使用了 44 次, 时间:2006-09-10 00:00:00.000


那么怎么构造SQL 语句呢?

回复列表 (共14个回复)

沙发

insert t2(timu,neirong,riqi) select '严重警告',username+'使用了'+countip+'次,时间:'+gegin_date,getdate() from t1

板凳

我要求表2 中一条记录把表一的3 条记录汇集 在一起 ,楼上的方法将在表2 中产生3 条记录!

 不符合要求!

3 楼

sql语句没那么大能耐,你需要编写存储过程。

4 楼

当然是要存储过程啊!
 现在就是要存储过程啊! 
 但是楼上老大 用SQL 实现了,我还没有测试是否通过!
declare @test varchar(1000)
set @test=''
select @test=@test+'姓名:'+username+',使用了:'+countip+'次 from #t1 
insert info(timu,neirong,riqi) select '严重警告',@test,getdate()

5 楼

shiyong 使用楼上的方法,获得的 neirong 是 null  不知道问题出在哪里!

6 楼

其实问题很简单,就是如何用一个变量把多条记录保存起来, 然后插入另外一个字段去!

7 楼

declare @userName varchar(50)
declare @countIp int
declare @begin_date datetime
declare @str nvarchar(4000)    --用来存拼凑的字符串
declare @i int
declare cur1 cursor
for 
    select * from historyInfo

open cur1

    fetch next from cur1 
    into @userName ,@countIp , @begin_date
    set @str = ''
    set @i = 1
    while(@@fetch_status=0)
    begin
        set @str = @str + '第'+ cast(@i as varchar(20)) + ' 姓名:'+ @userName +' 使用了 '+ cast (@countIp as varchar(50)) +' 次, 时间:'+ cast (@begin_date as varchar(50)) + CHAR(13) + CHAR(10)
        set @i = @i + 1
        fetch next from cur1 
        into @userName ,@countIp , @begin_date
        
    end

close cur1
deallocate cur1
insert into info values ('题目', @str, getdate())
print @str    --测试

8 楼

感觉写得好乱...   其实游标我不太会用 - -!

你要把一个表里的所有记录存到一个字段里

得用游标才可以哦(其它方法我没想到 - -!)

9 楼

declare @test varchar(1000)
set @test=''
select @test=@test+'姓名:'+username+',使用了:'+countip+'次 from #t1 
insert info(timu,neirong,riqi) select '严重警告',@test,getdate()
这样不可以吗??????????
#t1是临时表吗?我写给你的sql语句t1是代表你要查询的表名,而不是临时表.
historyinfo

10 楼

9 楼的不可以,我测试了,不论是临时表还是实际表都不可以,应该还是要用到游标的!

我来回复

您尚未登录,请登录后再回复。点此登录或注册