主题:如何构造这个INSERT 语句,超级难题
傻瓜911
[专家分:150] 发布于 2006-09-14 23:58:00
我要把对某个表的查询的多条记录(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个回复)
沙发
gggmmtddir [专家分:2690] 发布于 2006-09-14 23:56:00
insert t2(timu,neirong,riqi) select '严重警告',username+'使用了'+countip+'次,时间:'+gegin_date,getdate() from t1
板凳
傻瓜911 [专家分:150] 发布于 2006-09-14 23:58:00
我要求表2 中一条记录把表一的3 条记录汇集 在一起 ,楼上的方法将在表2 中产生3 条记录!
不符合要求!
3 楼
yaozheng [专家分:28410] 发布于 2006-09-15 00:31:00
sql语句没那么大能耐,你需要编写存储过程。
4 楼
傻瓜911 [专家分:150] 发布于 2006-09-15 01:12:00
当然是要存储过程啊!
现在就是要存储过程啊!
但是楼上老大 用SQL 实现了,我还没有测试是否通过!
declare @test varchar(1000)
set @test=''
select @test=@test+'姓名:'+username+',使用了:'+countip+'次 from #t1
insert info(timu,neirong,riqi) select '严重警告',@test,getdate()
5 楼
傻瓜911 [专家分:150] 发布于 2006-09-15 20:38:00
shiyong 使用楼上的方法,获得的 neirong 是 null 不知道问题出在哪里!
6 楼
傻瓜911 [专家分:150] 发布于 2006-09-15 20:40:00
其实问题很简单,就是如何用一个变量把多条记录保存起来, 然后插入另外一个字段去!
7 楼
celvin86 [专家分:110] 发布于 2006-09-15 21:25:00
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 楼
celvin86 [专家分:110] 发布于 2006-09-15 21:27:00
感觉写得好乱... 其实游标我不太会用 - -!
你要把一个表里的所有记录存到一个字段里
得用游标才可以哦(其它方法我没想到 - -!)
9 楼
gggmmtddir [专家分:2690] 发布于 2006-09-16 01:26:00
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 楼
傻瓜911 [专家分:150] 发布于 2006-09-16 22:57:00
9 楼的不可以,我测试了,不论是临时表还是实际表都不可以,应该还是要用到游标的!
我来回复