2009-09-29 7 views
5

Je viens de commencer à travailler avec SQL Server pour la première fois et j'ai du mal à remplir les données de test. J'ai deux tables où l'on a une clé étrangère à l'autre et je voudrais être en mesure d'insérer un nouvel enregistrement en utilisant l'instruction SQL suivante:Comment insérer une clé étrangère à l'aide d'un sous-SELECT dans SQL Server

insert into Employee (
    EmployeeName, 
    DepartmentId 
) values (
    "John Doe", 
    (select Id from Department where DepartmentName = 'Accounting') 
); 

Cette déclaration fonctionne très bien dans Oracle, mais dans SQL Server je reçois un erreur indiquant:

Subqueries are not allowed in this context. 

Est-ce que quelqu'un sait la bonne façon de faire cela dans SQL Server?

Répondre

10
INSERT INTO Employee 
    (EmployeeName, DepartmentId) 
SELECT 
    'John Doe' AS EmployeeName, Id AS DepartmentId 
FROM 
    Department WHERE DepartmentName = 'Accounting'; 
+0

Cool, ça marche très bien. Merci beaucoup. –

5

Vous pouvez faire:

insert into Employee (
    EmployeeName, 
    DepartmentId 
) 
SELECT 'John Doe', Id 
FROM Department 
WHERE DepartmentName = 'Accounting' 
1

Votre requête échouera dans Oracle s'il y a plus d'un service de comptabilité.

Si vous comptez sur ce comportement, utilisez cette syntaxe:

INSERT 
INTO Employee 
     (
     EmployeeName, 
     DepartmentId 
     ) 
SELECT "John Doe", 
     (
     SELECT id 
     FROM Department 
     WHERE DepartmentName = 'Accounting' 
     ) 

Sinon, il suffit d'utiliser la syntaxe SELECT FROM Department proposée par d'autres. Cependant,

Notez que cette syntaxe insérera John Doe deux fois ou plus, s'il y a plusieurs lignes avec name ensemble à Accounting dans Deparments.

+0

Vous avez raison, il échouerait mais c'est le comportement que je voudrais plutôt que d'insérer deux lignes. J'utilise juste ceci pour remplir certaines données de test. Merci beaucoup pour les commentaires. –

+0

'@Kevin Stembridge': Donc vous voulez qu'il échoue ou pour insérer deux lignes? Ma requête échouera. – Quassnoi

Questions connexes