1
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 查询?

4

2 回答 2

2

您可以ROW_NUMBERCTE中使用:

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

带有简化模型的DEMO

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

于 2013-02-28T09:09:12.527 回答
0

是的,请遵循 marcs 的建议。还有一件事,确保您的列 cusno 是一个 Identity 列,这样您就不必再经历重新排列它的整个过程。

于 2013-02-28T15:43:58.057 回答