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.