4 messaggi dal 25 maggio 2006
Ho il seguente problema:
Ho un db contenente tabelle che hanno indici autoincrementali.
Vorrei importare i dati da un altro db ma nell'importazione non mi deve ricalcolare gli autoincrementali.
Grazie
1.976 messaggi dal 27 luglio 2005
Contributi
salve Marianna,
marianna ha scritto:
Ho il seguente problema:
Ho un db contenente tabelle che hanno indici autoincrementali.
Vorrei importare i dati da un altro db ma nell'importazione non mi deve ricalcolare gli autoincrementali.
Grazie


non esistono indici "autoincrementali", bensi' esiste una proprieta' per le colonne di tipo numerico in grado di generare valori di sistema incrementali denominata IDENTITY (http://msdn2.microsoft.com/en-us/library/ms174979.aspx, paragrafo IDENTIY  )..
per poter "importare" righe in una tabella con una colonna configurata in tal senso e volendo mantenere i valori relativi della origine dei dati e' necessario indicare tale necessita' con l'esecuzione di SET IDENTITY_INSERT ON/OFF
http://msdn2.microsoft.com/en-us/library/ms188059.aspx, similarmente a
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.t1 (id int IDENTITY, col int DEFAULT 1);
CREATE TABLE dbo.t2 (id int IDENTITY, col int DEFAULT 1);
GO
DECLARE @i int;
SET @i = 1;
WHILE @i < 6 BEGIN
INSERT INTO dbo.t1 VALUES (@i);
INSERT INTO dbo.t2 VALUES (@i);
SET @i = @i + 1;
END;
GO
PRINT 'inserimento con generazione di nuovi valori generati dal sistema';
INSERT INTO dbo.t2 SELECT col FROM dbo.t1
SELECT * FROM dbo.t2;
GO
PRINT 'inserimento con mantenimento dei valori originali';
SET IDENTITY_INSERT dbo.t2 ON
INSERT INTO dbo.t2 (Id, col) SELECT Id, col FROM dbo.t1
SELECT * FROM dbo.t2;
SET IDENTITY_INSERT dbo.t2 OFF

GO
DROP TABLE dbo.t1, dbo.t2;
--<----------
inserimento con generazione di nuovi valori generati dal sistema
id col
----------- -----------
1 1
2 2
3 3
4 4
5 5
6 1
7 2
8 3
9 4
10 5

inserimento con mantenimento dei valori originali
id col
----------- -----------
1 1
2 2
3 3
4 4
5 5
6 1
7 2
8 3
9 4
10 5
1 1
2 2
3 3
4 4
5 5

saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
4 messaggi dal 25 maggio 2006
Grazie per la risposta, perchè non funziona se imposto la proprietà NOT FOR REPLICATION =yes; basterebbe solo questo per risolvere il problema visto che l'opzione NOT FOR REPLICATION di CREATE TABLE serve per ignorare l'incremento automatico di una colonna Identity quando i dati vengono replicati da un'altra origine, che può essere anche un'altro db.


Modificato da marianna il 12 dicembre 2006 11.52 -
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
marianna ha scritto:
Grazie per la risposta, perchè non funziona se imposto la proprietà NOT FOR REPLICATION =yes;


...perchè la REPLICA è una funzionalità che non ha nulla a che vedere con un "travaso di dati".
Se parli di "importare i dati da un altro db" è una cosa; se vogliamo parlare di replica è un'altra...

http://msdn2.microsoft.com/en-us/library/ms166352.aspx#Replication

Bye

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.