2010-03-04 6 views
0

ce que je suis en train de faire est la suivante:insérer plusieurs lignes avec un champ statique et les champs sélectionnés à partir d'une autre table

INSERT INTO Table1 (id1, id2) 
(
    SELECT id, 1 as id2 FROM Table2 
) 

sauf que je ne peux pas mettre « 1 ID2 » intérieur de cette instruction select.

ainsi, à titre d'exemple, je sorte de cette envie:

INSERT INTO Table1 (id1, id2 = 1) 
(
    SELECT id FROM Table2 
) 

Je mets cela dans une procédure stockée et l'instruction select est générée par linq2sql (en tant que variable de texte). Je serais heureux d'obtenir cette 'id2' dans le texte de la commande linq2sql, cependant le sql généré (correctement) ne place que les colonnes Table2 dans la requête (juste 'id1').

et je ne veux vraiment pas avoir à faire un peu de formatage de chaîne pour insérer le texte », 1 ID2' dans le texte de commande SQL ..

aussi je ne peux pas laisser ID2 comme nulle comme il est eu une contrainte FK dessus.

+0

Une contrainte de clé étrangère n'empêche pas l'insertion de valeurs NULL. –

+0

cela pourrait-il être fait d'une manière ou d'une autre en utilisant tempdb? sélectionnez les ID uniquement dans tempdb, puis de les déplacer dans Table1 avec l'ID2? – benpage

+0

@Mark - désolé je n'étais pas vraiment clair avec ce commentaire. Je ne veux pas mettre des valeurs nulles car elles DEVRAIENT toujours avoir le champ id2 comme données. – benpage

Répondre

0

ok got it:

create table #tmp 
(id1 int) 

insert into #tmp (id1) 
(
    select top 10 id1 from Table1 
) 

insert into Table2 (id1, id2) 
(
    select id1, 5 from #tmp 
) 

drop table #tmp 
0
INSERT INTO Table1 (id1, id2) SELECT id, 1 as id2 FROM Table2 
+0

er .. j'ai dit 'je ne peux pas mettre' 1 comme id2 'à l'intérieur de cette déclaration select' – benpage

0

Vous pouvez utiliser votre propre sql avec modification mineure.

INSERT INTO Table1 (id1, id2) 
(
    SELECT id, 1 FROM Table2 
) 
Questions connexes