2009-09-29 38 views
5

Tôi mới bắt đầu làm việc với SQL Server lần đầu tiên và tôi gặp sự cố khi điền dữ liệu thử nghiệm. Tôi có hai bảng, nơi người ta có một chính nước ngoài để người kia và tôi muốn để có thể chèn một kỷ lục mới bằng cách sử dụng SQL sau:Làm thế nào để chèn một khóa nước ngoài bằng cách sử dụng một Sub-SELECT trong SQL Server

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

Tuyên bố này hoạt động tốt trong Oracle nhưng trong SQL Server tôi nhận được một lỗi nói:

Subqueries are not allowed in this context. 

Có ai biết đúng cách để làm điều này trong SQL Server không?

Trả lời

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

Tuyệt, hoạt động rất tuyệt. Cảm ơn rất nhiều. –

5

Bạn có thể làm:

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

truy vấn của bạn sẽ thất bại trong Oracle nếu có nhiều hơn một bộ phận kế toán.

Nếu bạn dựa vào hành vi này, sử dụng cú pháp sau:

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

Nếu không, chỉ cần sử dụng cú pháp SELECT FROM Department bởi những người khác được đề xuất.

Lưu ý, tuy nhiên, cú pháp này sẽ chèn John Doe hai lần trở lên, nếu có nhiều hàng với name được đặt thành Accounting trong Deparments.

+0

Bạn nói đúng, nó sẽ thất bại nhưng đó là hành vi tôi muốn thay vì chèn hai hàng. Tôi chỉ sử dụng để điền một số dữ liệu thử nghiệm. Cảm ơn rất nhiều vì phản hồi. –

+0

'@Kevin Stembridge': Vì vậy, bạn muốn nó thất bại hoặc chèn hai hàng? Truy vấn của tôi sẽ không thành công. – Quassnoi

Các vấn đề liên quan