Benutzer mit den meisten Antworten
Primärschlüssel, Idenitätsspezifikationen ändern

Frage
-
Guten Tag,
ich habe beim Primärschlüssel(int) ist Identity auf Nein, hier werden zuerst manuell vorhandene werte eigegeben. Nach bestimmte Zeit wollen wir dass Autowert als Primärschlüssel erscheint. Ist es möglisch die Eigenschaft Idenitätsspezifikationen nachträglich zu ändern?
Danke und Gruß
Antworten
-
Danach funktioniert es mit Autowertvergabe. Kann hier was schief laufen?
Hast Du Dir mal das Änderungscript angesehen, das SSMS hier generiert? Die sieht (leicht gekürzt) so aus
/* To prevent any potential data loss issues, you should review this script in detail before running
it outside the context of the database designer.*/
BEGIN TRANSACTION GO CREATE TABLE dbo.Tmp_TestIdentity ( Id int NOT NULL IDENTITY (1, 1), MyValue nchar(10) NOT NULL ) ON [PRIMARY] GO SET IDENTITY_INSERT dbo.Tmp_TestIdentity ON GO IF EXISTS(SELECT * FROM dbo.TestIdentity) EXEC('INSERT INTO dbo.Tmp_TestIdentity (Id, MyValue) SELECT Id, MyValue FROM dbo.TestIdentity WITH (HOLDLOCK TABLOCKX)') GO SET IDENTITY_INSERT dbo.Tmp_TestIdentity OFF GO DROP TABLE dbo.TestIdentity GO EXECUTE sp_rename N'dbo.Tmp_TestIdentity', N'TestIdentity', 'OBJECT' GO ALTER TABLE dbo.TestIdentity ADD CONSTRAINT PK_TestIdentity PRIMARY KEY CLUSTERED ( Id ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO COMMIT
Es wir also eine neue Tabelle mit neuem Design = Identity Spalte angelegt, die Daten aus der alten in die neue Tabelle kopiert, die alte Tabelle gelöscht und die neue umbenannt. Grund ist wie erwähnt, das man eine Spalte nicht nachträglich auf Identity ändern kann.
Und ja, dabei könnte schon was schief gehen, wie die Tabelle sehr groß ist, könnte die Disk volllaufen, die die Daten + Indizes zeitweise doppelt vorhanden sind.Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort markiert ElenaMol Montag, 12. August 2013 10:36
Alle Antworten
-
-
Danke für die Antwort.
Habe auf einer Tabelle getestet. SQL Server Management Studio-Tabelle entwerfen. Bei Spalteneigenschaften habe Ifentitätsspezifikazion auf Ja umgestellt und gespeichert. Beim speichern kommt Warnung bei betroffenen Tabellen, die Tabelle speiche ich auch. Danach funktioniert es mit Autowertvergabe. Kann hier was schief laufen?
Gruß
-
Danach funktioniert es mit Autowertvergabe. Kann hier was schief laufen?
Hast Du Dir mal das Änderungscript angesehen, das SSMS hier generiert? Die sieht (leicht gekürzt) so aus
/* To prevent any potential data loss issues, you should review this script in detail before running
it outside the context of the database designer.*/
BEGIN TRANSACTION GO CREATE TABLE dbo.Tmp_TestIdentity ( Id int NOT NULL IDENTITY (1, 1), MyValue nchar(10) NOT NULL ) ON [PRIMARY] GO SET IDENTITY_INSERT dbo.Tmp_TestIdentity ON GO IF EXISTS(SELECT * FROM dbo.TestIdentity) EXEC('INSERT INTO dbo.Tmp_TestIdentity (Id, MyValue) SELECT Id, MyValue FROM dbo.TestIdentity WITH (HOLDLOCK TABLOCKX)') GO SET IDENTITY_INSERT dbo.Tmp_TestIdentity OFF GO DROP TABLE dbo.TestIdentity GO EXECUTE sp_rename N'dbo.Tmp_TestIdentity', N'TestIdentity', 'OBJECT' GO ALTER TABLE dbo.TestIdentity ADD CONSTRAINT PK_TestIdentity PRIMARY KEY CLUSTERED ( Id ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO COMMIT
Es wir also eine neue Tabelle mit neuem Design = Identity Spalte angelegt, die Daten aus der alten in die neue Tabelle kopiert, die alte Tabelle gelöscht und die neue umbenannt. Grund ist wie erwähnt, das man eine Spalte nicht nachträglich auf Identity ändern kann.
Und ja, dabei könnte schon was schief gehen, wie die Tabelle sehr groß ist, könnte die Disk volllaufen, die die Daten + Indizes zeitweise doppelt vorhanden sind.Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort markiert ElenaMol Montag, 12. August 2013 10:36
-
Vielen Dank!
Und noch eine Frage. Diese Spalte ist ein Fremdschlüssel. Ich muss wahrscheinlich erst die Beziehung löschen und danach neue Spalte mit Identity einfügen.Gibt es hier ein Problen bei Fremdschlüssel?