说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何用sql从一个表的5列数据中的4列copy到另一个表中?请指教

编辑:说三道四文库 发布时间:2018-05-23 01:46
HTML文档下载 WORD文档下载 PDF文档下载
如题,5列的列名是id1,id2,id3,id4,id5 不要的那列是列名=x的列,如何实现啊
insert into table(f1,f2,f3,f4) 
select d1,d2,d3,d4
from table2
where 条件
1楼的 我不要的那列是不确定的 
你给的是确定的情况下的代码
但是你要的列总能确定了吧?
举例:
窗体中edit1输入你不要的字段,ADOQUERY2执行插入操作(table1是源表,table2是目标表)


procedure TForm1.Button1Click(Sender: TObject);
var
str,strb:string;
i:integer;
begin

  with adoquery1 do begin
    close;
    sql.Text:='select * from table1 where 1<>1';{不会显示数据,只用作以下取字段之用}
    open;
    for i :=0  to Fields.Count-1 do
    if AnsiUpperCase(Fields[i].FieldName)<>AnsiUpperCase(edit1.Text) then {这里判断当前字段是否可取}
       str:=str+Fields[i].FieldName+',';
    strb:=copy(str,1,length(str)-1);{得到最后的可取字段名}

   with adoquery2 do begin
   Close;
   sql.Text:='insert into table2(f1,f2,f3,f4) select ' +strb+' from table1';
   ExecSQL;
   end;


end;



end;
修正一下:

procedure TForm1.Button1Click(Sender: TObject);
var
str,strb:string;
i:integer;
begin
  str:='';
  strb:='';
  with adoquery1 do begin
    close;
    sql.Text:='select * from table1 where 1<>1';{不会显示数据,只用作以下取字段之用}
    open;
    for i :=0  to Fields.Count-1 do
    if AnsiUpperCase(Fields[i].FieldName)<>AnsiUpperCase(edit1.Text) then {这里判断当前字段是否可取}
       str:=str+Fields[i].FieldName+',';
    strb:=copy(str,1,length(str)-1);{得到最后的可取字段名}

   with adoquery2 do begin
   Close;
   sql.Text:='insert into table2(f1,f2,f3,f4) select ' +strb+' from table1';
   ExecSQL;
   end;


end;



end;



楼上的,f1,f2,f3,f4我要用回id1,id2..id5的,而且你这样insert会不会导致每列的数据不在同一行啊 会顺接着下去的
那么你就要举一个详细点的例出来,即使我的代码达不到你的要求,最基本其它人也能看得明白,给予你帮助.
说具体点,把你的应用场景描述一下
LZ要学会变通才行
不应该奢求100%的正确答案啊
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘