2010-07-06 4 views
1

Je tente d'insérer des colonnes à partir d'une table temporaire et je souhaite que la colonne ID soit incrémentée séquentiellement. J'utilise le code suivant, mais rien ne doit être inséré:Insérer dans la table avec la colonne ID

INSERT INTO TestDataTable 
SELECT Code, Description, ParentID FROM TempTable 

Veuillez me dire comment cela fonctionne.

+0

Quel est le schéma de 'TestDataTable'? – Jon

Répondre

1

Vous devez définir l'ID sur IDENTITY column. Donc, dans votre instruction select into, quelque chose comme ceci devrait faire:

INSERT INTO TestDataTable 
SELECT ID = IDENTITY(INT,1,1), Code, Description, ParentID FROM TempTable 
1

Je dirais que vous avez deux options. La première consiste à gérer cela dans le langage de définition de données de votre table cible. Voir cet exemple de code écrit pour MS SQL Server.

CREATE TABLE #A ( 
    Id INT NOT NULL IDENTITY(1,1) PRIMARY KEY 
, Code VARCHAR(10) NOT NULL) 

CREATE TABLE #B (
    Code VARCHAR(10) NOT NULL) 

INSERT INTO #B VALUES ('alpha') 
INSERT INTO #B VALUES ('beta') 
INSERT INTO #B VALUES ('gamma') 
INSERT INTO #B VALUES ('delta') 

INSERT INTO #A (Code) 
SELECT Code 
FROM #B 

SELECT * 
FROM #A 

DROP TABLE #A 
DROP TABLE #B 

Si vous n'êtes pas autorisé à manipuler dans la table de LDD cible alors vous pouvez accomplir ce que vous devez être spécifier le chemin dans la table comme si vous le savez sera vide.

CREATE TABLE #A (
    Id INT NOT NULL PRIMARY KEY 
, Code VARCHAR(10) NOT NULL) 

CREATE TABLE #B (
    Code VARCHAR(10) NOT NULL) 

INSERT INTO #B VALUES ('alpha') 
INSERT INTO #B VALUES ('beta') 
INSERT INTO #B VALUES ('gamma') 
INSERT INTO #B VALUES ('delta') 

INSERT INTO #A (Id, Code) 
SELECT ROW_NUMBER() OVER (ORDER BY Code), Code 
FROM #B 

SELECT * 
FROM #A 

DROP TABLE #A 
DROP TABLE #B 

Je recommande vivement la première méthode. C'est beaucoup plus simple et vous n'avez pas à vous soucier de gérer l'auto-incrémentation dans le code.

Questions connexes