2010-05-26 10 views
0

J'ai une table A (Acons, A1, A2, A3) dans laquelle je devrais insérer des informations d'une autre table B avec des colonnes (B1, B2, B3). Les Acons est une colonne dans laquelle devraient figurer quelques nombres consécutifs (ce n'est pas une identité et je ne peux pas en faire une identité). Je sais xmin - en commençant le nombre de la séquence doit être calculée. Comment puis-je insérer les lignes dans la table A, en utilisant une seule instruction Insert?Insérer des nombres consécutifs

J'ai essayé comme ce qui suit, mais il ne fonctionne pas:

DECLARE @i AS INT; 

SET @i = xmin;  

INSERT INTO A(Acons, A1, A2, A3) 
SELECT @i = (Bcons = (@i + 1)), B1, B2, B3 
FROM B 

Unfortunatelly, la solution ci-dessus ne fonctionne pas;

Répondre

0

Je ne sais pas d'où vient xmin mais, essayez-le.

DECLARE @i AS INT; 
SET @i = xmin; 
Insert into A 
Select @i+1,b1,b2,b3 from B 
3

Vous avez déjà un ensemble de lignes pour générer des nombres à ajouter à Bcons. Il est plus délicat dans SQL Server 2000, mais on espère que vous êtes sur SQL Server 2005 +

WITh cNumbers AS 
(
    SELECT 
     ROW_NUMBER() OVER (ORDER BY Bcons) AS Number, 
     Bcons, B1, B2, B3 
    FROM 
     B 
) 
INSERT INTO A (Acons, A1, A2, A3) 
SELECT 
    Bcons + Number /* need -1 here? */, B1, B2, B3 
FROM 
    cNumbers 

Comme Philip Kelley mentionné, on n'a pas besoin du CTE. Doh.

SELECT 
    Bcons + ROW_NUMBER() OVER (ORDER BY Bcons) /* need -1 here? */, B1, B2, B3 
FROM 
    B 
+0

vous êtes un chiot malade. C'est une vraie bonne réponse. –

+1

Je ne pense pas que vous ayez besoin du CTE - on dirait que vous pouvez avoir {ROW_NUMBER} + 1 en colonne. –

+0

@Philip Kelley: Bon point ... la force de l'habitude, même si c'est un simple choix vraiment – gbn

0

Ceci est une autre façon de le faire:

DECLARE @i AS INT; 
SET @i = xmin; 
insert into a 
select ((ROW_NUMBER() OVER (ORDER BY b1))[email protected]) AS Number,b1,b2,b3 from b 

--re REVISEE

+0

Où est le @ xmin? – gbn

+0

essayez à nouveau s'il vous plaît – GeoAvila

+0

je ne sais pas si c'est ce que vous voulez mais, essayez-le. – GeoAvila

Questions connexes