我需要从有 100 行的名为 T_myorders 的表中复制前 50 行,并将其添加到同一个表中,但 id 列是主键,这不允许我这样做,我需要这样的输出当我将行添加到我的表中时,添加的行应该以 101,102,103.... 开始 id 列,而不是再次打印相同的 1,2,3....这一步和另一个是,
我应该声明两个值,一个是我需要复制多少顶行,另一个值是它应该重复多少次,比如 2,然后 50 行应该重复两次,id 列应该最多 200。谁能帮我这个任务。
谢谢,拉吉
我需要从有 100 行的名为 T_myorders 的表中复制前 50 行,并将其添加到同一个表中,但 id 列是主键,这不允许我这样做,我需要这样的输出当我将行添加到我的表中时,添加的行应该以 101,102,103.... 开始 id 列,而不是再次打印相同的 1,2,3....这一步和另一个是,
我应该声明两个值,一个是我需要复制多少顶行,另一个值是它应该重复多少次,比如 2,然后 50 行应该重复两次,id 列应该最多 200。谁能帮我这个任务。
谢谢,拉吉
将@s1 声明为 int
从表中选择 @s1=MAX(主键)
插入表格
select top 50 ROW_NUMBER() over (partition by 0 order by f1)+@s1 as pk_id (instead of primary key) ,f1,f2,f3 from Table
使用 select insert创建一个临时表,将前 x 个记录(其中 x 是第一个输入参数)插入到临时表中。
找到最大主键值,将其加 1 并将其存储在变量 primary_key
声明游标以从临时表中获取记录
在 for 循环中创建一个运行 y 次(其中 y 是第二个参数)
的 for 循环
打开游标并读取行
循环
将记录插入到主表中,使用 primary_key 作为主键
重新分配 primary_key = primary_key +1
关闭循环
关闭光标
关闭for循环
希望这可以帮助。这只是一个可能有用的算法
这可以以更好的方式完成
您可以通过使用以下语句来避免游标
创建一个临时
表,使用 select insert 将前 x 个记录(其中 x 是第一个输入参数)插入到临时表中。
找到最大主键值,将其存储在变量primary_key中
创建一个运行 y 次的 for 循环(其中 y 是第二个参数)
,在 for 循环
中插入 YOUR_TABLE SELECT IDENTITY(int, primary_key ,1) AS id, REST OF COLUMNS from temp table 重置 primary_key 以保存新值关闭循环