Sql server 2008 SQL Server将一个表的“n”个前元素插入另一个表,并将X-n插入另一个表

Sql server 2008 SQL Server将一个表的“n”个前元素插入另一个表,并将X-n插入另一个表,sql-server-2008,Sql Server 2008,如果我有一个带有X个寄存器的表,这里X=6 id field -------- 1 1232 2 346 3 349 4 465 5 68 6 545 如何在一个表中先插入n=3个元素,然后在另一个表中插入其余的X-n table1 id field -------- 1 1232 2 346 3 349 table2 id field -------- 1 465 2 68 3 545 我不知道您是在寻找一种通用的方法,还是一种特定于您的

如果我有一个带有X个寄存器的表,这里X=6

id field
--------
1  1232
2   346
3   349
4   465
5    68
6   545
如何在一个表中先插入n=3个元素,然后在另一个表中插入其余的X-n

table1
id field
--------
1  1232
2   346
3   349


table2
id field
--------
1   465
2    68
3   545

我不知道您是在寻找一种通用的方法,还是一种特定于您的场景的方法,但假设您正在寻找特定于您的场景的方法

由于您的表似乎已经有一个连续增加的列,我们可以使用:

INSERT INTO Table1
SELECT [ID], [Field]
  FROM [TableX]
 WHERE [ID] <= 3

INSERT INTO Table2
SELECT [ID] - 3, [Field]
  FROM [TableX]
 WHERE [ID] >= 4
此外,如果要插入的表的[id]列是标识列,则可以跳过插入它们,让identity负责为[id]列赋值,例如:

INSERT INTO Table1 ([Field])
SELECT TOP 3 [Field]
  FROM [TableX]
 ORDER BY [ID]

INSERT INTO Table2 ([Field])
SELECT TOP 3 [Field]
  FROM [TableX]
 ORDER BY [ID] DESC
还有其他方法,但这些都是最简单的方法之一。它们的适用性取决于您的具体情况。例如,如果表1和表2中需要固定数量的行,您特别想要3行,但在表X中有重复的[id]值,那么第一种方法将不起作用,其中一个表将获得3行以上的行,而另一个表将获得较少的行


我希望这能给你一些想法。顺便说一句,如果您担心[id]列的值可能存在差距或重复,Thomas的方法是非常好的。

我不知道您是在寻找一种通用的方法,还是一种特定于您的场景的方法,但假设您正在寻找特定于您的场景的方法

由于您的表似乎已经有一个连续增加的列,我们可以使用:

INSERT INTO Table1
SELECT [ID], [Field]
  FROM [TableX]
 WHERE [ID] <= 3

INSERT INTO Table2
SELECT [ID] - 3, [Field]
  FROM [TableX]
 WHERE [ID] >= 4
此外,如果要插入的表的[id]列是标识列,则可以跳过插入它们,让identity负责为[id]列赋值,例如:

INSERT INTO Table1 ([Field])
SELECT TOP 3 [Field]
  FROM [TableX]
 ORDER BY [ID]

INSERT INTO Table2 ([Field])
SELECT TOP 3 [Field]
  FROM [TableX]
 ORDER BY [ID] DESC
还有其他方法,但这些都是最简单的方法之一。它们的适用性取决于您的具体情况。例如,如果表1和表2中需要固定数量的行,您特别想要3行,但在表X中有重复的[id]值,那么第一种方法将不起作用,其中一个表将获得3行以上的行,而另一个表将获得较少的行

我希望这能给你一些想法。顺便说一句,如果您担心[id]列的值中可能存在间隙或重复,那么Thomas的方法非常好