SQL Server aggiunge la chiave primaria di incremento automatico alla tabella esistente

Come titolo, ho una tabella esistente che è già popolata con 150000 record. Ho aggiunto una colonna Id (che al momento è null).

Suppongo di poter eseguire una query per riempire questa colonna con numeri incrementali, quindi impostare come chiave primaria e triggersre l’incremento automatico. È questo il modo corretto di procedere? E se sì, come faccio a riempire i numeri iniziali?

No, devi farlo viceversa: aggiungilo fin INT IDENTITY come INT IDENTITY – sarà riempito con valori di id quadro quando lo fai:

 ALTER TABLE dbo.YourTable ADD ID INT IDENTITY 

e quindi puoi renderlo la chiave primaria:

 ALTER TABLE dbo.YourTable ADD CONSTRAINT PK_YourTable PRIMARY KEY(ID) 

o se preferisci fare tutto in un solo passaggio:

 ALTER TABLE dbo.YourTable ADD ID INT IDENTITY CONSTRAINT PK_YourTable PRIMARY KEY CLUSTERED 

Non puoi “accendere” l’IDENTITÀ: è una ricostruzione della tabella.

Se non ti interessa l’ordine dei numeri, devi aggiungere la colonna, NOT NULL, con IDENTITY in un colpo solo. Le file 150k non sono molte.

Se è necessario conservare un certo numero di ordine, aggiungere i numeri di conseguenza. Quindi utilizzare la finestra di progettazione tabella SSMS per impostare la proprietà IDENTITY. Questo ti permette di generare uno script che farà cadere / aggiungere / mantenere numeri / reseed per te.

Ho avuto questo problema, ma non è stato ansible utilizzare una colonna Identity (per vari motivi). Mi sono stabilito su questo:

 DECLARE @id INT SET @id = 0 UPDATE table SET @id = id = @id + 1 

Preso in prestito da qui .

Se la colonna esiste già nella tabella ed è null, è ansible aggiornare la colonna con questo comando (sostituisci id, tablename e tablekey):

 UPDATE x SET x. = x.New_Id FROM ( SELECT , ROW_NUMBER() OVER (ORDER BY ) AS New_Id FROM  ) x 

Quando aggiungiamo e identifichiamo la colonna in una tabella esistente, essa si popolerà automaticamente senza che sia necessario popolarla manualmente.

dal designer puoi impostare identity framework (1,1) tasto destro del mouse su tbl => desing => nella parte sinistra (tasto destro del mouse) => proprietà => nelle colonne identity framework selezionare #colonna

Proprietà

colonna idendtity

Ecco un’idea che puoi provare. Tabella originale: nessuna tabella di colonne Identity1 crea una nuova tabella: chiama table2 insieme alla colonna Identity. copia i dati da table1 a table2 – la colonna identity viene popolata automaticamente con numeri auto incrementati.

rinomina la tabella originale – table1 in table3 rinomina la nuova tabella – table2 in table1 (tabella originale) Ora hai la tabella 1 con colonna identity inclusa e popolata per i dati esistenti. dopo essersi assicurati che non ci siano problemi e che funzionino correttamente, rilascia la tabella 3 quando non è più necessaria.

Crea una nuova tabella con un nome diverso e le stesse colonne, l’associazione chiave primaria e chiave esterna e collegala nell’istruzione di codice Inserisci. Ad esempio: per DIPENDENTE, sostituire con DIPENDENTI.

 CREATE TABLE EMPLOYEES( EmpId INT NOT NULL IDENTITY(1,1), F_Name VARCHAR(20) , L_Name VARCHAR(20) , DOB DATE , DOJ DATE , PRIMARY KEY (EmpId), DeptId int FOREIGN KEY REFERENCES DEPARTMENT(DeptId), DesgId int FOREIGN KEY REFERENCES DESIGNATION(DesgId), AddId int FOREIGN KEY REFERENCES ADDRESS(AddId) ) 

Tuttavia, è necessario eliminare la tabella dei DIPENDENTI esistente o eseguire alcune regolazioni in base alle proprie esigenze.

Se la tua tabella ha una relazione con altre tabelle usando la sua chiave primaria o chiave, potrebbe essere imansible modificare la tabella. quindi è necessario rilasciare e creare nuovamente il tavolo.
Per risolvere questi problemi è necessario generare script facendo clic con il tasto destro del mouse sul database e in un’opzione avanzata, impostare il tipo di dati su script per schema e dati. successivamente, utilizzando questo script con la modifica della colonna per identificare e rigenerare la tabella utilizzando la sua query.
la tua richiesta sarà come qui:

 USE [Db_YourDbName] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO Drop TABLE [dbo].[Tbl_TourTable] CREATE TABLE [dbo].[Tbl_TourTable]( [ID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NULL, [Family] [nvarchar](150) NULL) GO SET IDENTITY_INSERT [dbo].[Tbl_TourTable] ON INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1') INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1') INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1') INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1') INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1') INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1') INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1') SET IDENTITY_INSERT [dbo].[Tbl_TourTable] off 

Questa risposta è una piccola aggiunta alla risposta più votata e funziona per SQL Server. La domanda ha richiesto una chiave primaria con incremento automatico, la risposta corrente aggiunge la chiave primaria, ma non viene contrassegnata come incremento automatico. Lo script seguente controlla le colonne, l’esistenza e lo aggiunge con il flag autoincrement triggersto.

 IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTable' AND COLUMN_NAME = 'PKColumnName') BEGIN ALTER TABLE dbo.YourTable ADD PKColumnName INT IDENTITY(1,1) CONSTRAINT PK_YourTable PRIMARY KEY CLUSTERED END GO 

ALTER TABLE nome_tabella ADD COLUMN ID INT NON NULL PRIMARY KEY AUTO_INCREMENT; Questo potrebbe essere utile

Prova qualcosa del genere (prima su una tabella di prova):

 USA your_database_name
 PARTIRE
 WHILE (SELEZIONA CONTEGGIO (*) DA your_table DOVE your_id_field È NULL)> 0
 INIZIO
     SET ROWCOUNT 1
     AGGIORNA your_table SET your_id_field = MAX (your_id_field) +1
 FINE
 STAMPA 'TUTTO FATTO'

Non l’ho ancora provato, quindi stai attento!

Funziona in MariaDB, quindi posso solo sperare che funzioni in SQL Server: rilascia la colonna ID che hai appena inserito, quindi utilizza la seguente syntax: –

ALTER TABLE nome_tabella ADD ID INT CHIAVE PRIMARIA AUTO_INCREMENT;

Non c’è bisogno di un altro tavolo. Ciò semplicemente inserisce una colonna id, la rende l’indice primario e la popola con valori sequenziali. Se SQL Server non lo farà, mi scuso per aver perso tempo.