SQL Server在表格中间插入行的方法

时间:2018-12-07 07:03:51

标签: sql-server insert

我在存储过程中有一个临时表,用于少量计算。 临时表中的数据最初是使用以下语法从实际表中填充的,

这是我拥有的sql语法,

Declare @TempC Table(id varchar(50),col2 varchar(50),col3 varchar(50),[sequence] int)
Insert into @TempC 
select id,col2,col3, row_number() over (order by (select NULL)) 
from ActualTable 
where id in ('50001','50005')       

我要插入的新行将类似于

Insert into @TempC values(id, @calculatedvalue, 'dummyinsert', 'nextsequencenumber')

此处id不是主键,出于跟踪目的,我将最后一列创建为[sequence](使用row_number()在sql函数中内置的(由(order)创建)),该列将具有不同值的数字序列id列。

现在我的问题是我需要根据每个column(id)的值在表中间插入一行。例如,假设@table有100条记录,其中id 50001将有50条不同的记录,而50005将有另外50条记录。现在我需要在最后一条记录50001和50005之后插入一行。

    id   col2   col3    [sequence]
    50001  a       x       1
    50001  b       y       2
    50001  c       z       3
    50001  d       z       4
------------------------------> insert new row here like 50001 somevalue somevalue 5 
    50005  a       m       5 -> change 5 to 6; 
    50005  b       i       6 
    50005  c       h       7 
    50005  d       g       8
------------------------------> insert new row here like 50005 somevalue somevalue 10 

感谢任何人都可以提供帮助。预先感谢。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那么您可以这样做:

Declare @TempC Table(id varchar(50),col1 varchar(50),col2 varchar(50),col3 varchar(50),[sequence] int)
Insert into @TempC 
select id,col1,col2,col3, row_number() over (order by (select NULL)) 
from ActualTable 
where id in ('50001','50005') 

让您有100行,然后

Update @TempC set [sequence]=[sequence]+1 where [sequence]>49
Insert into @TempC values(@id,@calculatedvalue, 'manual', 'refernce',50)

更新:

如果您不能对长度进行硬编码

Declare @length int

select @length = count([sequence]) from @TempC

Update @TempC set [sequence]=[sequence]+1 where [sequence]>@length/2
Insert into @TempC values(@id,@calculatedvalue, 'manual', 'refernce',@length/2)