SQL Server:重新排列主键ID以1开头

时间:2013-02-28 09:06:44

标签: sql sql-server-2008

CREATE TABLE [dbo].[Customer](
    [CusNo] [nvarchar](20) NULL,
    [CusName] [nvarchar](100) NULL,
    [DateIn] [nvarchar](12) NULL,
    [Add1] [nvarchar](255) NULL,
    [TelNoH] [nvarchar](50) NULL,
    [TelNoHP] [nvarchar](11) NULL,
    [DisSR] [nvarchar](50) NULL,
    [DisSL] [nvarchar](50) NULL,
    [DisCR] [nvarchar](50) NULL,
    [DisCL] [nvarchar](50) NULL,
    [DisAR] [nvarchar](50) NULL,
    [DisAL] [nvarchar](50) NULL,
    [ReadSR] [nvarchar](50) NULL,
    [ReadSL] [nvarchar](50) NULL,
    [ReadCR] [nvarchar](50) NULL,
    [ReadCL] [nvarchar](50) NULL,
    [ReadAR] [nvarchar](50) NULL,
    [ReadAL] [nvarchar](50) NULL,
    [PD] [nvarchar](50) NULL,
    [R] [nvarchar](50) NULL,
    [L] [nvarchar](50) NULL,
    [Remarks] [nvarchar](255) NULL,
    [ConSR] [nvarchar](50) NULL,
    [ConSL] [nvarchar](50) NULL,
    [ConCR] [nvarchar](50) NULL,
    [ConCL] [nvarchar](50) NULL,
    [ConAR] [nvarchar](50) NULL,
    [ConAL] [nvarchar](50) NULL,
    [Lens] [nvarchar](50) NULL,
    [Frame] [nvarchar](50) NULL,
    [Amount] [nvarchar](50) NULL,
    [LastUserUpdate] [nvarchar](15) NULL,
    [LastUpdateDate] [nvarchar](max) NULL
) ON [PRIMARY]

我正在使用Microsoft SQL Server 2008,我有一个表Customer,其中CustNo列是主键。我有大约30,000行手动输入CustNo。 我想更新所有CustNo以1开头,并持续增加1直到完成记录。

我必须使用什么SQL查询?

2 个答案:

答案 0 :(得分:2)

您可以在ROW_NUMBER中使用CTE

WITH CTE AS
(
   SELECT CusNo, RN = ROW_NUMBER() OVER (ORDER BY CusNo)
   FROM dbo.Customer
)
UPDATE CTE SET CusNo = RN

DEMO简化模型

但我也强烈建议遵循@marc_c建议使用正确的数据类型。

答案 1 :(得分:0)

  

是跟随marcs的建议。还有一件事,确保您的列cusno是一个标识列,这样您就不必再完成重新排列的整个过程。