2013-02-25 17 views
8

Chcę ustawić właściwość jest tożsamość kolumny na OFF i po włożeniu wyraźną wartość ustawienie go na again.I've napisane to zapytanie:Ustawianie tożsamość lub wyłączyć serwer SQL

SET IDENTITY_INSERT Tbl_Cartoons OFF 

Mimo że pomyślnie się powiodło, nic się nie zmienia w projekcie tabeli. Proszę zaproponować rozwiązanie, To naprawdę ważne.

Odpowiedz

5

Cała dana linia polega na wyłączeniu tożsamości, aby można było wstawić określone wartości do kolumny tożsamości - zwykle jest to konieczne w przypadku zdarzeń jednorazowych, takich jak przenoszenie danych. Tożsamość jest wciąż obecna na kolumnie, po prostu nie działa. Koncepcyjnie jest to podobne do różnicy między wyłączaniem i usuwaniem wyzwalaczy.

Usunięcie tożsamości z kolumny jest trudniejsze. The question covers it, ale podstawową ideą jest utworzenie nowej kolumny, skopiowanie danych, a następnie usunięcie kolumny tożsamości.

+0

Dzięki dużo ... –

6

Sesja ustawiająca SET IDENTITY_INSERT może wprowadzać wartości jawne.

Ale kolumna nadal jest kolumną tożsamości. Po prostu twoja sesja może zignorować ograniczenie tożsamości.

1

Włącz opcję identity_insert, aby móc jawnie ustawić wartość kolumny id. Ustaw ponownie, aby automatycznie przypisywać.

22

Rzeczywiście chcesz użyć SET IDENTITY_INSERT Tbl_Cartoons ON przed próbą wstawienia jawnych wartości.

Mówisz, że "będzie odpowiedzialny za wstawianie wartości do kolumny ".

SET IDENTITY_INSERT Tbl_Cartoons OFF mówi "Pozwolę, aby system przejął odpowiedzialność za wstawienie wartości do kolumny IDENTITY".

11

Aby wstawić jawne wartości do kolumny tożsamości, wykonaj następujące czynności:

SET IDENTITY_INSERT Tbl_Cartoons ON 
GO 

-- code to insert explicit ID values 

SET IDENTITY_INSERT Tbl_Cartoons OFF 
GO 
0

Ty może wyłączyć właściwość Identity, ale to wymaga edycji tabel systemowych, które nie są uważane za dobrą praktykę. Jesteś również mało prawdopodobne, aby mieć niezbędne prawa i będzie prawdopodobnie zobaczyć You do not have permission to run the RECONFIGURE statement próby następujący kod:

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