pengembangan-web-mp.com

SQL Server menambahkan kunci primer kenaikan otomatis ke tabel yang ada

Sebagai judul, saya memiliki tabel yang sudah ada yang sudah diisi dengan 150000 catatan. Saya telah menambahkan kolom Id (yang saat ini nol).

Saya berasumsi bahwa saya dapat menjalankan kueri untuk mengisi kolom ini dengan angka tambahan, dan kemudian menetapkan sebagai kunci utama dan mengaktifkan kenaikan otomatis. Apakah ini cara yang benar untuk melanjutkan? Dan jika demikian, bagaimana cara saya mengisi angka awal?

215

Tidak - Anda harus melakukannya sebaliknya: tambahkan langsung dari get go INT IDENTITY - itu akan diisi dengan nilai identitas saat Anda melakukan ini:

ALTER TABLE dbo.YourTable
   ADD ID INT IDENTITY

dan kemudian Anda bisa menjadikannya sebagai kunci utama:

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

atau jika Anda lebih suka melakukan semuanya dalam satu langkah:

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

Anda tidak dapat "menghidupkan" IDENTITAS: itu adalah tabel yang dibangun kembali.

Jika Anda tidak peduli dengan urutan nomor, Anda akan menambahkan kolom, BUKAN NULL, dengan IDENTITAS sekaligus. 150k baris tidak banyak.

Jika Anda perlu mempertahankan urutan nomor, maka tambahkan nomor yang sesuai. Kemudian gunakan desainer tabel SSMS untuk mengatur properti IDENTITY. Ini memungkinkan Anda untuk membuat skrip yang akan melakukan drop kolom/tambahkan/simpan nomor/reseed untuk Anda.

18
gbn

Saya memiliki masalah ini, tetapi tidak dapat menggunakan kolom identitas (karena berbagai alasan). Saya memutuskan ini:

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

Dipinjam dari di sini .

11
Kevin

Jika kolom sudah ada di tabel Anda dan itu adalah nol, Anda dapat memperbarui kolom dengan perintah ini (ganti id, nama tab, dan tablekey):

UPDATE x
SET x.<Id> = x.New_Id
FROM (
  SELECT <Id>, ROW_NUMBER() OVER (ORDER BY <tablekey>) AS New_Id
  FROM <tablename>
  ) x
4
Renzo Ciot

Jika tabel Anda memiliki hubungan dengan tabel lain menggunakan kunci primer atau foriegen, mungkin tidak mungkin untuk mengubah tabel Anda. jadi Anda perlu menjatuhkan dan membuat tabel lagi.
Untuk mengatasi masalah ini, Anda perlu Menghasilkan Skrip dengan mengklik kanan pada database dan pada opsi lanjutan atur jenis data ke skrip ke skema dan data. setelah itu, gunakan skrip ini dengan mengubah kolom Anda untuk mengidentifikasi dan membuat ulang tabel menggunakan menjalankan kueri.
kueri Anda akan seperti di sini:

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 
2
Hamid

Ketika kami menambahkan dan kolom identitas dalam tabel yang ada, tabel itu akan secara otomatis mengisi tidak perlu mengisi secara manual.

2
user3279092

oleh perancang Anda dapat menetapkan identitas (1,1) klik kanan pada tbl => desing => di bagian kiri (klik kanan) => properties => di kolom identitas pilih #column

Properti

kolom idendtity

2
gustavo herrera

Jawaban ini adalah tambahan kecil untuk jawaban terpilih tertinggi dan berfungsi untuk SQL Server. Pertanyaannya meminta kunci primer kenaikan otomatis, jawaban saat ini memang menambahkan kunci utama, tetapi tidak ditandai sebagai kenaikan otomatis. Script di bawah ini memeriksa kolom, keberadaan, dan menambahkannya dengan flag peningkatan otomatis diaktifkan.

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
0
John K.

Inilah ide yang bisa Anda coba. Tabel asli - tidak ada kolom identitas table1 buat tabel baru - panggil table2 bersama dengan kolom identitas. salin data dari table1 ke table2 - kolom identitas diisi secara otomatis dengan angka yang bertambah secara otomatis.

ganti nama tabel asli - table1 ke table3 ganti nama tabel baru - table2 ke table1 (tabel asli) Sekarang Anda memiliki table1 dengan kolom identitas disertakan dan diisi untuk data yang ada. setelah memastikan tidak ada masalah dan berfungsi dengan baik, jatuhkan table3 saat tidak lagi diperlukan.

0
JH326

Buat Tabel baru Dengan nama berbeda dan kolom yang sama, Kunci Primer dan asosiasi Kunci Asing dan tautkan ini dalam pernyataan kode Sisipkan Anda. Untuk E.g: Untuk KARYAWAN, ganti dengan KARYAWAN.

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)   
) 

Namun, Anda harus menghapus Tabel EMPLOYEE yang ada atau melakukan beberapa penyesuaian sesuai dengan kebutuhan Anda.

0
kumarP