IDENTITY_INSERT OFF olarak ayarlandı - Nasıl AÇIK hale getirilir?


112

Silinen dosyanın kimliğini depolayan silinmiş bir dosya arşivi veritabanım var, yöneticinin dosyayı geri yükleyebilmesini istiyorum (ayrıca dosyaları bağlamak için aynı kimliği). Tek bir artış harika çalıştığından, tüm tablodan Identity_insert'i çıkarmak istemiyorum. TBL_ContentProsedür saklamak için ekimde buna benzer bir şey var

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
SET IDENTITY_INSERT tbl_content ON
GO

ALTER procedure [dbo].[spInsertDeletedIntoTBLContent]
@ContentID int, 
...insert command...
SET IDENTITY_INSERT tbl_content OFF

Ama aynı hatayı alıyorum:

IDENTITY_INSERT OFF olarak ayarlandığında, 'TBL_Content' tablosundaki kimlik sütunu için açık değer eklenemez.

Herhangi bir yardım?

Yanıtlar:


174

Bunun yerine, saklı yordam içinde kimlik ekini açık olarak ayarlamanız gerekir mi? Görünüşe göre onu gerçekten çağırırken değil, yalnızca saklı yordamı değiştirirken açık konuma getiriyorsunuz. Deneyin:

ALTER procedure [dbo].[spInsertDeletedIntoTBLContent]
@ContentID int, 

SET IDENTITY_INSERT tbl_content ON

...insert command...

SET IDENTITY_INSERT tbl_content OFF
GO

16

Identity_Insert ON'u ayarlamanız, kayıtları eklemeniz ve ardından tekrar kapatmanız gerekmez mi?

Bunun gibi:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
SET IDENTITY_INSERT tbl_content ON
GO

ALTER procedure [dbo].[spInsertDeletedIntoTBLContent]
@ContentID int, 
SET IDENTITY_INSERT tbl_content ON
...insert command...
SET IDENTITY_INSERT tbl_content OFF

14

Bunun tek bir sorgu grubunda yapılması gerektiğine inanıyorum. Temel olarak, GO deyimleri komutlarınızı birden çok gruba ayırıyor ve bu da soruna neden oluyor. Şununla değiştirin:

SET IDENTITY_INSERT tbl_content ON
/* GO */

...insert command...

SET IDENTITY_INSERT tbl_content OFF
GO

1
Haklısın. Konu bu! Ekleme için bir sonraki komut grubu SET IDENTITY_INSERT tbl_content ON ile başlamalıdır; tekrar komut verin.
Jettero

9

Hatırlatma

SQL Server yalnızca bir tablonun IDENTITY_INSERT özelliğinin AÇIK olarak ayarlanmasına izin verir.

Bu çalışmıyor:

SET IDENTITY_INSERT TableA ON
SET IDENTITY_INSERT TableB ON
... INSERT ON TableA ...
... INSERT ON TableB ...
SET IDENTITY_INSERT TableA OFF
SET IDENTITY_INSERT TableB OFF

Yerine:

SET IDENTITY_INSERT TableA ON
... INSERT ON TableA ...
SET IDENTITY_INSERT TableA OFF
SET IDENTITY_INSERT TableB ON
... INSERT ON TableB ...
SET IDENTITY_INSERT TableB OFF


4

Bu satırı üstüne ekle Sorgu

SET IDENTITY_INSERT tbl_content ON

2

Set de ekle

 SET IDENTITY_INSERT Genre ON

    INSERT INTO Genre(Id, Name, SortOrder)VALUES (12,'Moody Blues', 20) 

    SET IDENTITY_INSERT Genre  OFF
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.