如题~~~~~~原表及数据:(原始表有N个)tb1
id aa bb cc dd stime
1 11 22 33 44 2009-5-18
2 55 66 77 88 2009-5-19 tb2
id ee ff gg hh stime
1 12 23 34 45 2009-5-18
2 56 67 78 89 2009-5-19
导入表:tb3(想实现以下效果)id sname svalue stime
1 a01 11 2009-5-18
2 b01 22 2009-5-18
3 c01 33 2009-5-18
4 d01 44 2009-5-18
5 a01 55 2009-5-19
6 b01 66 2009-5-19
7 c01 77 2009-5-19
8 d01 88 2009-5-19
9 e01 12 2009-5-18
10 f01 23 2009-5-18
11 g01 34 2009-5-18
12 h01 45 2009-5-18
13 e01 56 2009-5-19
14 f01 67 2009-5-19
15 g01 78 2009-5-19
16 h01 89 2009-5-19想实现把原始表中数据导入tb3表中,其中原始表和导入表不在同一个数据库,表的字段名也不相同,但可以写死,
比如tb1中aa对应的tb3中的就是a01
可以用一个小程序实现,条件就是选择原始表名和时间,点导入就把该表对应时间的数据导入到tb3中
想了半天没想出好的解决方法.
请个位帮帮忙,谁做过类似的例子给解答下.要是能用一个存储过程时间就更好了!
意思表达不清楚的请问~
100分笑纳~~
id aa bb cc dd stime
1 11 22 33 44 2009-5-18
2 55 66 77 88 2009-5-19 tb2
id ee ff gg hh stime
1 12 23 34 45 2009-5-18
2 56 67 78 89 2009-5-19
导入表:tb3(想实现以下效果)id sname svalue stime
1 a01 11 2009-5-18
2 b01 22 2009-5-18
3 c01 33 2009-5-18
4 d01 44 2009-5-18
5 a01 55 2009-5-19
6 b01 66 2009-5-19
7 c01 77 2009-5-19
8 d01 88 2009-5-19
9 e01 12 2009-5-18
10 f01 23 2009-5-18
11 g01 34 2009-5-18
12 h01 45 2009-5-18
13 e01 56 2009-5-19
14 f01 67 2009-5-19
15 g01 78 2009-5-19
16 h01 89 2009-5-19想实现把原始表中数据导入tb3表中,其中原始表和导入表不在同一个数据库,表的字段名也不相同,但可以写死,
比如tb1中aa对应的tb3中的就是a01
可以用一个小程序实现,条件就是选择原始表名和时间,点导入就把该表对应时间的数据导入到tb3中
想了半天没想出好的解决方法.
请个位帮帮忙,谁做过类似的例子给解答下.要是能用一个存储过程时间就更好了!
意思表达不清楚的请问~
100分笑纳~~
解决方案 »
- 【求助】SQL2008怎么做一个回收站的功能
- 大家帮写一个自定义函数吧。谢谢了。
- 请问如何在SQL2005中新建一个实例?
- 为什么sql server进程信息里面全是sp_cursorclose,sp_cursorfetch进程,数据库就不工作了
- SQL判断问题?
- 可否在select 中作if判断?
- 请问如何得到当前数据库的数据库名以及用户名和用户所属的owner(比如是否dbo)?
- 提交一张表单,经过经理审批,但会计还没审批情况下可以撤单,该如何写SQL啊?
- 如何对以下功能实现模糊查询,见内容
- 有关于Oracle数据库数据导入导出的问题,高手来吧!我欢迎……
- insert插入记录到表出现的小问题
- sql server2008安装问题
如果在一个服务器,直接服务器名.dbo.表明,INSERT就行了
原始表数据库名:olddata
导入表数据库名:newdata
谢谢了!
UNION ALL
SELECT 'B01',BB,stime FROM DB1.DBO.TB1
UNION ALL
SELECT 'C01',CC,stime FROM DB1.DBO.TB1
UNION ALL
SELECT 'D01',DD,stime FROM DB1.DBO.TB1
UNION ALL
SELECT 'E01',AA,stime FROM DB2.DBO.TB2
UNION ALL
SELECT 'F01',BB,stime FROM DB2.DBO.TB2
UNION ALL
SELECT 'G01',CC,stime FROM DB2.DBO.TB2
UNION ALL
SELECT 'H01',DD,stime FROM DB2.DBO.TB2
insert into newdatabase.dbo.newdata(col1,col2,col3)
select col1,col2,col3
from olddata
where 条件
INSERT newdata.DBO.TB3 SELECT * FROM
(
SELECT 'A01',AA,stime FROM olddata.DBO.TB1
UNION ALL
SELECT 'B01',BB,stime FROM olddata.DBO.TB1
UNION ALL
SELECT 'C01',CC,stime FROM olddata.DBO.TB1
UNION ALL
SELECT 'D01',DD,stime FROM olddata.DBO.TB1
UNION ALL
SELECT 'E01',AA,stime FROM olddata.DBO.TB2
UNION ALL
SELECT 'F01',BB,stime FROM olddata.DBO.TB2
UNION ALL
SELECT 'G01',CC,stime FROM olddata.DBO.TB2
UNION ALL
SELECT 'H01',DD,stime FROM olddata.DBO.TB2
)T
/*
问题:如果上述两表互相换一下:即表结构和数据为:
姓名 语文 数学 物理
张三 74 83 93
李四 74 84 94
想变成(得到如下结果):
姓名 课程 分数
---- ---- ----
李四 语文 74
李四 数学 84
李四 物理 94
张三 语文 74
张三 数学 83
张三 物理 93
--------------
*/create table tb(姓名 varchar(10) , 语文 int , 数学 int , 物理 int)
insert into tb values('张三',74,83,93)
insert into tb values('李四',74,84,94)
go--SQL SERVER 2000 静态SQL。
select * from
(
select 姓名 , 课程 = '语文' , 分数 = 语文 from tb
union all
select 姓名 , 课程 = '数学' , 分数 = 数学 from tb
union all
select 姓名 , 课程 = '物理' , 分数 = 物理 from tb
) t
order by 姓名 , case 课程 when '语文' then 1 when '数学' then 2 when '物理' then 3 end--SQL SERVER 2000 动态SQL。
--调用系统表动态生态。
declare @sql varchar(8000)
select @sql = isnull(@sql + ' union all ' , '' ) + ' select 姓名 , [课程] = ' + quotename(Name , '''') + ' , [分数] = ' + quotename(Name) + ' from tb'
from syscolumns
where name! = N'姓名' and ID = object_id('tb') --表名tb,不包含列名为姓名的其它列
order by colid asc
exec(@sql + ' order by 姓名 ')--SQL SERVER 2005 动态SQL。
select 姓名 , 课程 , 分数 from tb unpivot (分数 for 课程 in([语文] , [数学] , [物理])) t--SQL SERVER 2005 动态SQL,同SQL SERVER 2000 动态SQL。
INSERT @TA
SELECT 1, 11, 22, 33, 44, '2009-5-18' UNION ALL
SELECT 2, 55, 66, 77, 88, '2009-5-19'DECLARE @TB TABLE([id] INT, [ee] INT, [ff] INT, [gg] INT, [hh] INT, [stime] DATETIME)
INSERT @TB
SELECT 1, 12, 23, 34, 45, '2009-5-18' UNION ALL
SELECT 2, 56, 67, 78, 89, '2009-5-19'SELECT id=row_number() over (order by px,id,seq),sname,svalue,stime INTO tb3
FROM (
SELECT px=0,id,seq=1,svalue=aa,sname='a01',stime FROM @TA
UNION ALL
SELECT px=0,id,seq=2,bb,'b01',stime FROM @TA
UNION ALL
SELECT px=0,id,seq=3,cc,'c01',stime FROM @TA
UNION ALL
SELECT px=0,id,seq=4,dd,'d01',stime FROM @TA
UNION ALLSELECT px=1,id,seq=1,ee,'e01',stime FROM @TB
UNION ALL
SELECT px=1,id,seq=2,ff,'f01',stime FROM @TB
UNION ALL
SELECT px=1,id,seq=3,gg,'g01',stime FROM @TB
UNION ALL
SELECT px=1,id,seq=4,hh,'h01',stime FROM @TB
) T
ORDER BY px,id,seqselect * from tb3drop table tb3
/*
id sname svalue stime
-------------------- ----- ----------- -----------------------
1 a01 11 2009-05-18 00:00:00.000
2 b01 22 2009-05-18 00:00:00.000
3 c01 33 2009-05-18 00:00:00.000
4 d01 44 2009-05-18 00:00:00.000
5 a01 55 2009-05-19 00:00:00.000
6 b01 66 2009-05-19 00:00:00.000
7 c01 77 2009-05-19 00:00:00.000
8 d01 88 2009-05-19 00:00:00.000
9 e01 12 2009-05-18 00:00:00.000
10 f01 23 2009-05-18 00:00:00.000
11 g01 34 2009-05-18 00:00:00.000
12 h01 45 2009-05-18 00:00:00.000
13 e01 56 2009-05-19 00:00:00.000
14 f01 67 2009-05-19 00:00:00.000
15 g01 78 2009-05-19 00:00:00.000
16 h01 89 2009-05-19 00:00:00.000
*/
用几个表查询,拼接成tb3要的数据,插入即可。
create table tb1
(
id int, aa int, bb int, cc int, dd int, stime Datetime
)create table tb2
(
id int, ee int, ff int, gg int, hh int, stime Datetime
)insert into tb1
select 1, 11, 22, 33, 44 , '2009-5-18 ' union all
select 2, 55, 66, 77, 88, '2009-5-19 'insert into tb2
select 1 , 12, 23 , 34, 45, '2009-5-18 ' union all
select 2, 56, 67, 78, 89, '2009-5-19 'select * from tb1
select * from tb2create table modelbaby5
(
id int identity(1,1) ,sname varchar(10), svalue varchar(10), stime Datetime
)
create proc tb1_tb1_TO_modelbaby5
asinsert into 数据库名称.dbo.modelbaby5
SELECT 'A01',AA,stime FROM DBO.TB1
UNION ALL
SELECT 'B01',BB,stime FROM DBO.TB1
UNION ALL
SELECT 'C01',CC,stime FROM DBO.TB1
UNION ALL
SELECT 'D01',DD,stime FROM DBO.TB1
UNION ALL
SELECT 'E01',ee,stime FROM DBO.TB2
UNION ALL
SELECT 'F01',ff,stime FROM DBO.TB2
UNION ALL
SELECT 'G01',gg,stime FROM DBO.TB2
UNION ALL
SELECT 'H01',hh,stime FROM DBO.TB2
exec tb1_tb1_TO_modelbaby5select *from modelbaby5
加上你的条件就行了,INSERT就OK了
比如 tb1\tb2 在192.168.1.1服务器上的BASE1数据库中
tb3在192.168.1.2服务器上的BASE2数据库中
/*不同服务器数据库之间的数据操作*/--创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 ' --查询示例
select * from ITSV.数据库名.dbo.表名 --导入示例
select * into 表 from ITSV.数据库名.dbo.表名 --以后不再使用时删除链接服务器
exec sp_dropserver 'ITSV ', 'droplogins ' --连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset --查询示例
select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --生成本地表
select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --把本地表导入远程表
insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
select *from 本地表 --更新本地表
update b
set b.列A=a.列A
from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b
on a.column1=b.column1 --openquery用法需要创建一个连接 --首先创建一个连接创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
--查询
select *
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
--把本地表导入远程表
insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
select * from 本地表
--更新本地表
update b
set b.列B=a.列B
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a
inner join 本地表 b on a.列A=b.列A --3、opendatasource/openrowset
SELECT *
FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta
--把本地表导入远程表
请问如果是不同服务器怎么那怎么写这条?
比如 tb1\tb2 在192.168.1.1服务器上的BASE1数据库中
tb3在192.168.1.2服务器上的BASE2数据库中在SQL语句中如何实现呢?
在线等!!!!!!!!!
exec sp_addlinkedsrvlogin 's1', 'false ',null, 'sa', '123456' select * from s1.BASE1.dbo.tb1exec sp_dropserver 's1', 'droplogins '
如果都是SQL,服务器类型就选择SQL server,再到安全性选项卡,选择最后一项
用此安全上下文进行输入另一个服务器的用户密码,确定就行了
再192.168.1.1下就可以使用这个语句了
insert into [192.168.1.2].databasename.dbo.tb3(col1,col2,clo3)
SELECT 'A01',AA,stime
FROM DBO.TB1
..
..
..
go2. 再执行下面的脚本, 意思是从当前tb1数据库中根据条件取数据, 再插入到目标数据库中
日期条件LZ自行修改哟declare @dtQty smalldatetime
set @dtQty = '2009-05-18'insert into tb3数据库名.dbo.tb3
select 'A01', AA, stime from tb1 where stime = @dtQty
union all
select 'B01', BB, stime from tb1 where stime = @dtQty
union all
select 'C01', CC, stime from tb1 where stime = @dtQty
union all
select 'D01', DD, stime from tb1 where stime = @dtQty
union all
select 'E01', ee, stime from tb2 where stime = @dtQty
union all
select 'F01', ff, stime from tb2 where stime = @dtQty
union all
select 'G01', gg, stime from tb2 where stime = @dtQty
union all
select 'H01', hh, stime from tb2 where stime = @dtQty
(
RowID int identity(1,1),
aa int,
bb int,
cc int,
dd int,
stime date
)declare @result table
(
id int identity(1,1),
sname varchar(10),
svalue int,
stime date
)insert into @source(aa,bb,cc,dd,stime)
values(11,22,33,44,'2009-5-18'),
(55,66,77,88,'2009-5-19')insert into @result(sname,svalue,stime)
select test,svalues,stime
from @source unpivot (svalues for test in (aa,bb,cc,dd)) unpot
select * from @result
go
create table tb1
(
id int identity(1,1) primary key,aa varchar(20),bb varchar(20),cc varchar(20),dd varchar(20),stime varchar(20)
)
go
create table tb2
(
id int identity(1,1) primary key,ee varchar(20),ff varchar(20),gg varchar(20),hh varchar(20),stime varchar(20)
)
goinsert into tb1 values( '11', '22', '33', '44', '2009-5-18')
insert into tb1 values('55', '66', '77', '88', '2009-5-19')
insert into tb2 values('12', '23', '34', '45', '2009-5-18')
insert into tb2 values('56', '67', '78', '89', '2009-5-19')use NewsTable
go
create table tb3
(
id int identity(1,1) primary key,sname varchar(20),svalue varchar(20),stime varchar(20)
)
goinsert into NewsTable.dbo.tb3 select stuff(sname,2,1,'01') as sname,value as svalue,stime from (select id,aa,bb,cc,dd,stime from tb1) a
unpivot (value for sname in (aa,bb,cc,dd)) as unainsert into NewsTable.dbo.tb3 select stuff(sname,2,1,'01') as sname,value as svalue,stime from (select id,ee,ff,gg,hh,stime from tb2) b
unpivot (value for sname in (ee,ff,gg,hh)) as unbselect * from NewsTable.dbo.tb3同一服务器不同数据库
create table #tb1 (id int,aa int,bb int,cc int,dd int,stime datetime)
insert into #tb1 values(1, 11, 22, 33, 44, '2009-5-18')
insert into #tb1 values(2, 55, 66, 77, 88, '2009-5-19')--create tbl2
create table #tb2 (id int,ee int,ff int,gg int,hh int,stime datetime)
insert into #tb2 values(1, 12, 23, 34, 45, '2009-5-18')
insert into #tb2 values(2, 56, 67, 78, 89, '2009-5-19')--create tbl3
create table #tb3 (id int identity(1,1),sname varchar(10),svalue int ,stime datetime)
--insert into tb3
insert into #tb3(sname,svalue,stime)
select sname, svalue, stime
from
(select aa as a01,bb as b01,cc as c01,dd as d01,stime
from #tb1 )t
unpivot
(svalue for sname in (a01,b01,c01,d01) ) as unpvt
union all
select sname, svalue, stime
from
(select ee as e01,ff as f01,gg as g01,hh as h01,stime
from #tb2 )t
unpivot
(svalue for sname in (e01,f01,g01,h01) ) as unpvt--check result
select * from #tb3