SQL Server:以适当的顺序重新创建表

时间:2015-02-18 10:41:00

标签: sql-server

我从SQL Server数据库中的表中删除了一些记录(更确切地说是第4行)。现在第一列如下(1,2,3,5)没有第4行:

       ID Name
       ------------
       1   Luk
       2   Sky
       3   Philips
       5   Andrey

如何重新创建此表并按适当顺序再次插入所有数据?

像这样:

       ID Name
       --------
       1   Luk
       2   Sky
       3   Philips
       4   Andrey

编辑:

但是如果我有另一个不是键的列(数字),就像这样:

       ID Number Name
       ------------
       1    1      Luk
       2    2      Sky
       3    3      Philips
       5    5      Andrey

然后我可以重新创建列号和名称,

         ID Number Name
       ------------
       1    1      Luk
       2    2      Sky
       3    3      Philips
       5    4      Andrey          'Can i do this, and if can HOW?

3 个答案:

答案 0 :(得分:0)

您可以使用dbcc命令

DBCC CHECKIDENT('tableName', RESEED, 0)

它会将身份重置为0。

注意首先需要截断表格。

答案 1 :(得分:0)

您可以将ID设置为自动递增,默认情况下,AUTO_INCREMENT的起始值为1,每个新记录的值将增加1。

例如,MSSQL使用IDENTITY关键字自动递增,而MySQL使用AUTO_INCREMENT关键字执行自动递增功能。

MSSQL ID int IDENTITY(1,1) PRIMARY KEY

的MySQL ID int NOT NULL AUTO_INCREMENT

答案 2 :(得分:0)

我会做一个非常强大的案例,因为它不会存储这个数字,因为它是计算出来的,而你可以创建一个视图:

CREATE VIEW dbo.YourView
AS
SELECT  ID,
        Number = ROW_NUMBER() OVER(ORDER BY ID),
        Name
FROM    dbo.YourTable;
GO

这样,删除行后,您的视图就已经同步,无需执行任何更新。

如果您需要存储该值,则几乎相同的查询适用,但只是放在公共表表达式中,然后更新:

WITH CTE AS
(   SELECT  ID, 
            Number, 
            NewNumber = ROW_NUMBER() OVER(ORDER BY ID)
    FROM    dbo.YourTable
)
UPDATE  CTE
SET     Number = NewNumber;