我需要从表中复制前10行并将其添加到同一个表中,但id列是主键???我怎样才能做到这一点?

时间:2013-10-23 05:07:44

标签: sql-server-2008 sql-server-2005

我需要从名为T_myorders的表中复制前50行,这些行有100行,并将其添加到同一个表中,但id列是原始键,这不允许我这样做,我需要输出以这种方式,当我将行添加到我的表时,添加的行应该以101,102,103 ....开始id列而不是再次打印相同的1,2,3 ....这一步和另一行是,

我应该声明两个值,一个是我需要复制多少个顶行,另一个值是它应该重复多少次,比如2,然后50行应该重复两次,id列应该高达200。              任何人都可以帮我完成这项任务。

谢谢, 拉吉

2 个答案:

答案 0 :(得分:0)

创建临时表
使用select insert将top x记录(其中x是第一个输入参数)插入临时表 找到最大主键值,将其增加1并将其存储在变量primary_key中 声明游标以从临时表中获取记录

创建一个运行y次的for循环(其中y是第二个参数)
内循环
打开光标并读取行

将记录插入主表,使用primary_key作为主键
重新分配primary_key = primary_key +1
闭环
关闭光标
关闭for循环

希望这会有所帮助。这只是一个可能有用的算法

这可以通过更好的方式完成

你可以通过使用下面的语句来避免光标
创建临时表
使用select insert将top x记录(其中x是第一个输入参数)插入临时表 找到最大主键值,将其存储在变量primary_key中

创建一个运行y次的for循环(其中y是第二个参数)
内循环
插入YOUR_TABLE SELECT IDENTITY(int,primary_key,1)AS id,来自临时表的REST OF COLUMNS 重置primary_key以保存新值 闭环

答案 1 :(得分:0)

将@ s1声明为int

中选择@ s1 = MAX(主键)

插入表格

选择前50个ROW_NUMBER()结束(按f1分区0顺序)+ @ s1作为pk_id (而不是主键),f1,f2,f3来自