Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server конвертира колона в колона за самоличност

За съжаление не можете да промените поле на IDENTITY на съществуваща таблица.

Трябва:

  • Създайте нова таблица с IDENTITY поле
  • Проблем SET IDENTITY_INSERT ON за новата таблица
  • Вмъкнете данните в новата таблица
  • Проблем SET IDENTITY_INSERT OFF за новата таблица
  • Премахнете старата таблица
  • Преименувайте новата таблица със старото име.

Можете да използвате SSMS за да промените типа на полето, той ще направи всичко това вместо вас зад кулисите.

Ето примерна таблица:

CREATE TABLE plain (id INT NOT NULL PRIMARY KEY)

INSERT
INTO    plain
VALUES  (1000)

и скрипта, генериран от SSMS :

SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_plain
    (
    id int NOT NULL IDENTITY (1, 1)
    )  ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_plain SET (LOCK_ESCALATION = TABLE)
GO
SET IDENTITY_INSERT dbo.Tmp_plain ON
GO
IF EXISTS(SELECT * FROM dbo.plain)
     EXEC('INSERT INTO dbo.Tmp_plain (id)
        SELECT id FROM dbo.plain WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_plain OFF
GO
DROP TABLE dbo.plain
GO
EXECUTE sp_rename N'dbo.Tmp_plain', N'plain', 'OBJECT' 
GO
ALTER TABLE dbo.plain ADD CONSTRAINT
    PK__plain__3213E83F1A609306 PRIMARY KEY CLUSTERED 
    (
    id
    ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

GO
COMMIT


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да видя параметрите на текущо изпълняваните процедури в SQL Server 2008

  2. Задайте опция 9 в съхранената процедура на SQL Server, като използвате WinHttp.WinHttpRequest.5.1 за TLS 1.2

  3. Генериране на скриптове за конкретни записи в SQL Server

  4. Как да върнете всички деактивирани ограничения на външния ключ в SQL Server (пример за T-SQL)

  5. рекурсивен cte с функции за класиране