每次在sql表

时间:2018-01-09 08:20:17

标签: sql sql-server

我在SQL表中有3列: 例如:

|| ID || Name    || Position ||
   1    Robert        1
   2    Superman      2
   3    Spiderman     1
   .     .            .
   .     .            .
  1080   Herry        1

我希望从同一个表中选择数据,并在以下命令的帮助下插入整数相同的表:

INSERT INTO Table1 (Name, Position)
SELECT NAME, Position FROM Table1 WHERE ID IN (2,3)

新创建的行的值(Table1.Position)不应与旧的相同,但只要调用命令就从1开始,每次添加新行时增加(1)。 对于前者:当我打电话给跟随时:

INSERT INTO Table1 (Name, Position)
SELECT NAME, Position FROM Table1 WHERE ID IN (2,3)

表格应如下所示

|| ID || Name    || Position ||
   1    Robert        1
   2    Superman      2
   3    Spiderman     1
   .     .            .
   .     .            .
  1080   Herry        1
  1081   Superman     1
  1082   Spiderman    2

位置值可以是1到n之间的任何值。其中n取决于否。使用相同命令插入的行增加1并且每次再调用一个新命令,Position / n值应从1开始并且不依赖于最近/旧/最后一行位置值。

3 个答案:

答案 0 :(得分:2)

我假设您希望每次插入数据时将位置限制为2 为此,这里有一些方法使用row_number()函数

INSERT INTO Table1 (Name, Position)
SELECT NAME, 1+((row_number() over(order by id)-1)%2) Position 
FROM Table1 WHERE ID IN (2,3)

第二个是从 SQL Server 2012 +

创建序列
create sequence dbo.sq
start with 1
increment by 1
minvalue 1
maxvalue 2
cycle

AND ,通过调用NEXT VALUE FOR函数

来使用它
INSERT INTO Table1 (Name, Position)
SELECT NAME, next value for dbo.sq Position 
FROM Table1 WHERE ID IN (2,3)

编辑:如果您只想给名字指定位置,请使用row_number()订购...

SELECT NAME, row_number() over (order by (select 1)) Position 
FROM Table1 
WHERE ID IN (2,3)

答案 1 :(得分:0)

INSERT INTO Table1 (Name, Position) (
    SELECT Name, row_number() over(order by Position) Table1 
    WHERE Position IN (2, 3)
)

答案 2 :(得分:0)

您可以将ID列设为IDENTITY(1,1)。这样表格的每个条目都以1开头并以1递增。