2009-09-29 7 views
5

Właśnie zacząłem pracować z SQL Server po raz pierwszy i mam problem z wypełnianiem danych testowych. Mam dwie tabele, w których jeden ma klucz obcy do drugiej i chciałbym, aby móc wstawić nowy rekord stosując następujący SQL:Jak wstawić klucz obcy za pomocą Sub-SELECT w SQL Server

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

Stwierdzenie to działa dobrze w Oracle, ale w SQL Server pojawia się komunikat o błędzie:

Subqueries are not allowed in this context. 

Czy ktoś wie, jak to zrobić na serwerze SQL?

Odpowiedz

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

Fajnie, to działa świetnie. Dziękuję bardzo. –

5

można zrobić:

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

Zapytanie zawiedzie w Oracle jeśli istnieje więcej niż jeden dział księgowości.

Jeśli opierać się na tego problemu należy użyć następującej składni:

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

W przeciwnym razie po prostu użyć składni SELECT FROM Department proponowane przez innych.

Należy jednak pamiętać, że ta składnia wstawi John Doe dwa razy lub więcej, jeśli istnieje wiele wierszy z name zestaw do Accounting w Deparments.

+0

Masz rację, to się nie uda, ale takie zachowanie chciałbym, w przeciwieństwie do wstawiania dwóch wierszy. Używam tego do zapełnienia niektórych danych testowych. Dziękuję bardzo za opinie. –

+0

'@Kevin Stembridge': Czy chcesz, aby się nie udało lub wstawić dwa wiersze? Moje zapytanie zakończy się niepowodzeniem. – Quassnoi