J'ai créé une table dans SQL Server comme ceci:
CREATE TABLE [UserName]
(
[ID] [int] NOT NULL ,
[Name] [nvarchar] (50) NOT NULL ,
[Address] [nvarchar] (200) NULL
CONSTRAINT [PK_UserName] PRIMARY KEY CLUSTERED ([ID] ASC)
) ON [PRIMARY]
GO
Si je veux faire ID
une colonne d'identité, de quoi ai-je besoin? Dois-je supprimer et créer cette table et définir ID
sur [ID] [int] IDENTITY(1,1) NOT NULL
.
En utilisant drop et create, toutes les données de la table UserName
sont perdues.
Existe-t-il un autre moyen de définir IDENTITY COLUMN
sur la colonne created table sans perdre de données?
J'utilise SQL Server 2008 R2 :)
ALTER TABLE [UserName] DROP COLUMN [ID];
ALTER TABLE [UserName]
ADD [ID] integer identity not null;
Le moyen le plus simple: -
J'espère que cela t'aides
Essaye celui-là -
DECLARE @temp TABLE
(
ID INT NOT NULL
, Name NVARCHAR(50) NOT NULL
, [Address] NVARCHAR(200) NULL
)
INSERT INTO @temp (ID, Name, [Address])
SELECT ID, Name, [Address]
FROM dbo.UserName
DROP TABLE dbo.UserName
CREATE TABLE dbo.UserName
(
[ID] [int] IDENTITY(1,1) NOT NULL
, [Name] [nvarchar] (50) NOT NULL
, [Address] [nvarchar] (200) NULL
CONSTRAINT [PK_UserName] PRIMARY KEY CLUSTERED
([ID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
SET IDENTITY_INSERT dbo.UserName ON
INSERT INTO dbo.UserName (ID, Name, [Address])
SELECT ID, Name, [Address]
FROM @temp
SET IDENTITY_INSERT dbo.UserName OFF
Voici une solution à journalisation minimale.
SELECT
IDENTITY(INT, 1,1) AS ID,
Name, [Address]
INTO dbo.UserName_temp
FROM dbo.UserName;
ALTER TABLE dbo.UserName_temp
ADD CONSTRAINT [PK_UserName] PRIMARY KEY CLUSTERED;
DROP TABLE dbo.UserName;
EXEC sp_rename 'dbo.UserName_temp', 'UserName';
SRC: http://sqlmag.com/sql-server/appending-identity-column-temporary-table
Mais la fonction IDENTITY () ne peut "que dans une instruction SELECT avec une clause de table INTO".