2009-09-29 63 views
5

我剛開始第一次使用SQL Server,並且在填充測試數據時遇到問題。我有兩個表,其中一個有外鍵等,我希望能夠使用下列SQL插入一個新的記錄:如何在SQL Server中使用子選擇插入外鍵

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

此語句工作正常,在甲骨文,但在SQL Server中,我得到一個錯誤說:

Subqueries are not allowed in this context. 

有沒有人知道在SQL Server中這樣做的正確方法?

回答

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

很酷,這很好。非常感謝。 – 2009-09-29 15:47:15

5

你可以這樣做:如果有超過一個會計部門

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

您的查詢將在Oracle失敗。

如果依賴於這種行爲,使用此語法:

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

否則,只是利用他人提出的SELECT FROM Department語法。

但是請注意,這句法將插入John Doe兩次或更多次,如果有與name設置爲AccountingDeparments多行。

+0

你是對的,它會失敗,但這是我想要的行爲,而不是插入兩行。我只是用它來填充一些測試數據。非常感謝您的反饋。 – 2009-09-29 15:45:29

+0

'@Kevin Stembridge':所以你希望它失敗或插入兩行?我的查詢將失敗。 – Quassnoi 2009-09-29 15:48:28