我在存储过程中有一个临时表,用于少量计算。 临时表中的数据最初是使用以下语法从实际表中填充的,
这是我拥有的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
感谢任何人都可以提供帮助。预先感谢。
答案 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)