如果新记录的内容完全一样,我们可以用insert into 表 select * from 表 而如果新记录的值不一样,一般的方法是 先把要复制的表的数据读出来,值1,值2,值3,然后insert into 表(字段1,字段2,字段3) values (值1,值2,值3,)这样的sql语句比较烦琐,特别是字段多的时候,我在考虑用什么好的方法处理只有个别字段不同的情况下如果快速复制原来的数据。
如果表有主键,并且表结构一样,那么: insert tb2 select * from tb1 where 主键='sdf' 然后修改id update tb2 set id=233 where 主键='sdf'
declare @sql Nvarchar(4000) set @sql='' select @sql=@sql+N','+quotename(name) from syscolumns where id=object_id(N'A') and name<>'a' set @sql=stuff(@sql,1,1,N'') set @sql='insert into a select ' + @sql + ' from a where a=1' exec(@sql)--列a是主键
更正declare @sql Nvarchar(4000) set @sql='' select @sql=@sql+N','+quotename(name) from syscolumns where id=object_id(N'A') and name<>'a' set @sql=stuff(@sql,1,1,N'') set @sql='insert into a (' + @sql + ') select ' + @sql + ' from a where a=1' exec(@sql)--列a是主键
比如标tbl1有字段id,a,b,c,d……………… 其中字段id是主键 想在想复制id值为99的记录declare @sql Nvarchar(4000) set @sql='' select @sql=@sql+N','+quotename(name) from syscolumns where id=object_id(N'tbl1') and name<>'id' set @sql=stuff(@sql,1,1,N'') set @sql='insert into a (' + @sql + ') select ' + @sql + ' from tbl1 where id=99' exec(@sql)
而如果新记录的值不一样,一般的方法是
先把要复制的表的数据读出来,值1,值2,值3,然后insert into 表(字段1,字段2,字段3) values (值1,值2,值3,)这样的sql语句比较烦琐,特别是字段多的时候,我在考虑用什么好的方法处理只有个别字段不同的情况下如果快速复制原来的数据。
insert tb2 select * from tb1 where 主键='sdf'
然后修改id
update tb2 set id=233 where 主键='sdf'
set @sql=''
select @sql=@sql+N','+quotename(name) from syscolumns where id=object_id(N'A') and name<>'a'
set @sql=stuff(@sql,1,1,N'')
set @sql='insert into a select ' + @sql + ' from a where a=1'
exec(@sql)--列a是主键
set @sql=''
select @sql=@sql+N','+quotename(name) from syscolumns where id=object_id(N'A') and name<>'a'
set @sql=stuff(@sql,1,1,N'')
set @sql='insert into a (' + @sql + ') select ' + @sql + ' from a where a=1'
exec(@sql)--列a是主键
其中字段id是主键
想在想复制id值为99的记录declare @sql Nvarchar(4000)
set @sql=''
select @sql=@sql+N','+quotename(name) from syscolumns where id=object_id(N'tbl1') and name<>'id'
set @sql=stuff(@sql,1,1,N'')
set @sql='insert into a (' + @sql + ') select ' + @sql + ' from tbl1 where id=99'
exec(@sql)