这个SQL怎么写(没有结束,继续)? (20分)

  • 主题发起人 主题发起人 易名烦
  • 开始时间 开始时间
Select * Into #T From TABLE1
ALTER TABLE #T DROP COLUMN id
insert into TABLE2 select * from #T

 
有没有办法能够一句SQL搞定?
 
可能你的 table1 中根本没有 table2 中的 id 字段。
所以这样简单地写是不行的。
 
不是这样的,字段一样,只是都有个ID是自增字段,且是关键字。
 
insert into a(col1,col2......) 不加那个自增量的字段
select b.col1,b.col2 from b
 
在我不知道有哪些字段的情况下,怎么完成这句SQL?
 
我想只能用一些工具了
 
你的问题,我们组里的同事,也遇到过,他的处理办法,如同楼某位说的
INSERT INTO TABLE2(字段1,2。,) SELECT (字段1,2。,) FROM TABLE1当然不包括id字段
我提供另一种思路:
A:xm,fs,id1(不是种子字段),id(种子字段)
B:xm,fs,id1(种子字段)
insert into A select * from B <-就OK了
问题的关键是,你两个表的种子字段重名,解决它就好了。
 
为什么要有两个完全相同的表?这样行不行?
去掉table2 id字段的自增属性,
insert
加上自增属性[:D]
 
再看看有没有其它说法!
 
to panjf:数据库在负荷运行时动态修改表的结构,可能导致其它用户提交失败。
 
tomljh:
再想想办法好吗?
 
insert into table2 (id,fld1,fld2,...)
select id,fld1,fld2,... from table1
where not exists (select id from table2 where id=table1.id)
 
不对吧,哪ID号相等的不就进不去了。
 
not exists就是控制相等的就不插入了!
啊,错了,若相等的也要插入的话就需要把where条件去掉!
 
那还是得写字段名啊?
在不知道字段名的情况下怎么写?
 
select b.name from sysobjects a left join syscolumns b
on a.id=b.id where a.name=table1name
列出来,填上。
楼上的列出语句也都正确,但是必须保证两个表字段顺序一致才可以,
若这种处理就一次,就查出来填上即可,否则就简单做个小程序生成这种语句
就可以了吗?
 
dldyj:
由于我是SQL2K入门者,所以您写的SQL我没看懂,烦解释一下!
 
上面的语句其实是察看table1表中都有那些字段的!
后面的table1name处填上表名,用单引号引起运行就可以了。
同样再列出第二个表的字段,把相同的需要插入的字段加到前面的
insert into语句中即可。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
605
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部