it-swarm.com.de

Festlegen der Identität in SQL Server

Ich möchte die Eigenschaft Is Identity einer Spalte auf off setzen und nach dem Einfügen eines expliziten Werts wieder auf ein setzen. Ich habe diese Abfrage geschrieben:

SET IDENTITY_INSERT Tbl_Cartoons OFF

Obwohl es erfolgreich ausgeführt wird, ändert sich nichts am Tabellendesign. Bitte schlagen Sie eine Lösung vor. Es ist wirklich wichtig.

11
user1831490

Sie müssen lediglich die Identität deaktivieren, damit Sie bestimmte Werte in Ihre Identitätsspalte einfügen können. Dies ist in der Regel für einmalige Aktionen erforderlich, beispielsweise für das Verschieben von Daten. Die Identität ist immer noch auf der Kolonne, und es wird einfach nicht darauf reagiert. Konzeptionell ähnelt dies dem Unterschied zwischen Deaktivieren und Entfernen von Triggern.

Die Identität vollständig aus der Spalte zu entfernen, ist schwieriger. Die Frage behandelt es , aber die Grundidee ist, dass Sie eine neue Spalte erstellen, die Daten kopieren und dann die Identitätsspalte entfernen müssen.

5
Jon Egerton

Sie möchten tatsächlich SET IDENTITY_INSERT Tbl_Cartoons ON verwenden, bevor Sie versuchen, explizite Werte einzufügen.

Sie sagen, dass "Ifür das Einfügen von Werten in die Spalte IDENTITY zuständig sein wird".

SET IDENTITY_INSERT Tbl_Cartoons OFF sagt "Ich lasse das System die Verantwortung für das Einfügen von Werten in die Spalte IDENTITY übernehmen".

24

Führen Sie folgende Schritte aus, um explizite Werte in die Identitätsspalte einzufügen:

SET IDENTITY_INSERT Tbl_Cartoons  ON
GO

-- code to insert explicit ID values

SET IDENTITY_INSERT Tbl_Cartoons  OFF
GO
12
Vadim Tychonoff

Die Sitzung, die SET IDENTITY_INSERT festlegt, darf explizite Werte eingeben.

Die Spalte ist jedoch immer noch eine Identitätsspalte. Es ist nur so, dass Ihre Sitzung die Identitätseinschränkung ignorieren kann.

6
Andomar

Setzen Sie identity_insert auf on, um den Wert der id-Spalte explizit festlegen zu können. Setzen Sie es erneut für die automatische Zuweisung ab.

1
cf_en

Sie can deaktivieren die Identity-Eigenschaft, müssen jedoch Systemtabellen bearbeiten, was nicht als bewährte Methode angesehen wird. Sie haben wahrscheinlich auch nicht die erforderlichen Rechte und werden wahrscheinlich mit You do not have permission to run the RECONFIGURE statement den folgenden Code versuchen :

DECLARE @tableName nvarchar(128) = 'YourTable';

-- Get a list of identity columns (informational)
SELECT OBJECT_NAME(object_id) tableName, sc.name colName, st.name dataType
FROM sys.columns sc
JOIN sys.types st
    ON st.system_type_id = sc.system_type_id
WHERE sc.is_identity = 1
AND OBJECT_NAME(object_id) = @tableName

-- Allow ad-hoc changes to system catalogs
EXEC  sp_configure 'allow update', 1
GO
reconfigure with override
GO
-- Eliminate the identityness
UPDATE syscolumns SET colstat = colstat - 1
WHERE id = object_id(@tableName)
AND name = 'Id' -- Specify column if you like, though only one identity per table is currently supported
GO
-- Unallow ad-hoc changes to system catalogs
exec sp_configure 'allow update', 0
GO
reconfigure with override
GO
0
Charles Burns