怎么利用SQL语句插入一条除主键外相同的数据

gul_gui 2010-03-12 02:50:11
表是采用 a,b 双主键的 其余的字段是动态生成的。
现在知道 a,b的值。要插入一条除了b增加1之外完全相同的数据,请问sql语句该怎么写?

insert into 表(字段1,字段2,字段3) select 字段1,字段2,字段3 from 表 where 字段1=
这种方法貌似是不好用的 因为字段3之后都是自动生成的
...全文
594 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
gul_gui 2010-03-12
  • 打赏
  • 举报
回复
谢谢啦
bancxc 2010-03-12
  • 打赏
  • 举报
回复
gul_gui 2010-03-12
  • 打赏
  • 举报
回复
慕白兄的方法也可行 但是如果一次连接发起多个的话 表删除不掉
gul_gui 2010-03-12
  • 打赏
  • 举报
回复
恐惧之狼的方法 是可行的。
declare @Columns nvarchar(4000)
declare @FinalSql nvarchar(4000)
select @Columns=isnull(@Columns, ' ')+ '['+name+ '] ,' from syscolumns where id=object_id( 'tb8 ')
and name!= 'DataID' and name!= 'StepInstID'
set @Columns=left(@Columns,len(@Columns)-1)

set @FinalSql = 'insert into tb8(DataID, StepInstID,' + @Columns + ')
select DataID, StepInstID + 1, ' + @Columns + ' from tb8 where DataID =''tb8a5587164-8ad8-4aa9-94ea-2488b82b582c''AND StepInstID=''6'''
print @FinalSql

exec (@FinalSql)
雪狐 2010-03-12
  • 打赏
  • 举报
回复
顶慕白兄的方法。。
bancxc 2010-03-12
  • 打赏
  • 举报
回复
就是动态sql,因为你的列式动态的你也不知道列名
cpp2017 2010-03-12
  • 打赏
  • 举报
回复
还是提示 数据库中已存在名为 '#temp' 的对象。
你先把连接断开,再测试。
gul_gui 2010-03-12
  • 打赏
  • 举报
回复
select * into #temp from tb8 where DataID ='tb8a5587164-8ad8-4aa9-94ea-2488b82b582c'AND StepInstID='4'
update #temp set StepInstID = StepInstID+1

insert into tb8 select * from #temp where DataID ='tb8a5587164-8ad8-4aa9-94ea-2488b82b582c'AND StepInstID='5';
drop table #temp

还是提示 数据库中已存在名为 '#temp' 的对象。
gul_gui 2010-03-12
  • 打赏
  • 举报
回复
恐惧之狼的代码 我太菜了 没看懂。。。
cpp2017 2010-03-12
  • 打赏
  • 举报
回复
慕白兄的临时表可以用 但是好像只能用一次 以后就提示数据库中已存在名为 '#temp1' 的对象。
===>连接关闭后就没有了,如果你要在一个连接中用多次,可加一句
drop table #temp
gul_gui 2010-03-12
  • 打赏
  • 举报
回复
慕白兄的临时表可以用 但是好像只能用一次 以后就提示数据库中已存在名为 '#temp1' 的对象。

mail_ylei 的方法 插入错误: 列名或所提供值的数目与表定义不匹配。
mail_ylei 2010-03-12
  • 打赏
  • 举报
回复

--带条件
insert into 表
select a,b+1,c from 表 where 字段1=

小鹏 2010-03-12
  • 打赏
  • 举报
回复
SQL code
insert into 表
select a,b from 表
mail_ylei 2010-03-12
  • 打赏
  • 举报
回复

insert into 表
select a,b+1,c from 表

bancxc 2010-03-12
  • 打赏
  • 举报
回复
 [code=SQL]--改了下 试试

declare @strinsert varchar(1000)
declare @strSelect varchar(1000)
select @strinsert='b'
select @strSelect='b+1'
select @strinsert=isnull(@strinsert+',','')+name,@strSelect=isnull(@strSelect+',','')+name
from syscolumns
where [name]<>'a' and [name]<>'b' and id=object_id('tb')
print('insert into tb('+@strinsert+') select '+@strSelect+' from tb ')
exec('insert into tb('+@strinsert+') select '+@strSelect+' from tb ')
[/code]
gul_gui 2010-03-12
  • 打赏
  • 举报
回复
慕白兄的方法貌似不错 去测试下~
bancxc 2010-03-12
  • 打赏
  • 举报
回复
--试试

declare @strinsert varchar(1000)
declare @strSelect varchar(1000)
select @strinsert='b'
declare @strSelect='b+1'
select @strinsert=isnull(@strinsert',','')+name,@strSelect=isnull(@strSelect',','')+name
from syscolumns
where [name]<>'a' and [name]<>'b' and id=object_id('tb')
print('insert into tb('+@strinsert+') select '+@strSelect+' from tb ')
exec('insert into tb('+@strinsert+') select '+@strSelect+' from tb ')
linrl 2010-03-12
  • 打赏
  • 举报
回复
没看明白你的描述
cpp2017 2010-03-12
  • 打赏
  • 举报
回复
想偷懒的话用临时表。

select * into #temp from 表;
update #temp set b = b+1

insert into 表 select * from #temp
ws_hgo 2010-03-12
  • 打赏
  • 举报
回复
我看不懂你问题
提供下表结构
测试信息
及其你想要的结果
加载更多回复(1)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧