如何从insert into子句中的表中插入非顺序Id

时间:2018-05-15 13:34:42

标签: sql sql-server

我需要在table2中插入表1的ID。问题在于表1中的顺序行没有顺序Id。 (有人擦除了一些行,因此连续行没有顺序ID)

执行select * from table 1会导致:

表1

Id    Value1
------------
2       X
4       Y
10      Z
12      XYZ
14      ZD
121     XD
122     ZS
------------

表2的理想结果是:

   Id    Value1   Value2      Date
    -----------------------------------
    1       67       2       2018-05-15
    2       67       4       2018-05-15
    3       67      10       2018-05-15
    4       67      12       2018-05-15
    5       67      14       2018-05-15
    6       67      121      2018-05-15
    7       67      122      2018-05-15
    ------------------------------------

在表2中插入值的代码。我只需要表1来复制正确的Id。

declare @value int
set @value=(select count(*) from table1) 
while @value>0

            begin
                insert into (table2)
                values ('67',@HOW_TO_RETRIEVE THE CORRECT ID from TABLE 1?,getdate())
                set @value=@value-1

            end

当然使用@value它不起作用,我试图在值内使用select子句但无济于事。谢谢。

3 个答案:

答案 0 :(得分:2)

你不想为这种类型的东西使用循环。您可以非常轻松地在插入中使用select语句。这样的东西适合你。这假设table2中的Id是一个标识。如果不是,我们可以利用ROW_NUMBER()生成顺序值。

insert table2
(
    Value1
    , Value2
    , [Date]
)
select '67'
    , Id
    , getdate()
from Table1

答案 1 :(得分:2)

像这样?

alter table2 add id bigint identity(1,1)
;
insert table2 (Value1, Value2, Date)
select '67', ID ,getdate()
from TABLE1
;

答案 2 :(得分:1)

insert into table2 (value1, value2, [Date])
select 67, Id, getdate() from table1;