2009-09-29 14 views
5

में उप-चयन का उपयोग करके एक विदेशी कुंजी डालने के लिए मैंने पहली बार SQL सर्वर के साथ काम करना शुरू कर दिया है और मुझे परीक्षण डेटा पॉपुलटिंग में समस्या हो रही है। मैं दो तालिकाओं है, जहां एक दूसरे के लिए एक विदेशी कुंजी है और मैं निम्नलिखित एसक्यूएल का उपयोग कर एक नया रिकॉर्ड डालने के लिए सक्षम होने के लिए करना चाहते हैं:SQL सर्वर

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

यह बयान Oracle में ठीक काम करता है, लेकिन एसक्यूएल सर्वर में मैं एक मिल त्रुटि कहावत:

Subqueries are not allowed in this context. 

किसी एसक्यूएल सर्वर में यह करने के लिए सही तरीके से पता है?

उत्तर

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

कूल, यह बहुत अच्छा काम करता है। बहुत बहुत धन्यवाद। –

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 दो बार या उससे अधिक है, अगर वहाँ Deparments में Accounting करने के लिए name सेट के साथ एकाधिक पंक्तियों हैं डाल देंगे।

+0

आप सही हैं, यह असफल हो जाएगा लेकिन यह वह व्यवहार है जिसे मैं दो पंक्तियों को डालने के विरोध में चाहता हूं। मैं बस कुछ परीक्षण डेटा को पॉप्युलेट करने के लिए इसका उपयोग कर रहा हूं। प्रतिक्रिया के लिए बहुत बहुत धन्यवाद। –

+0

'@ केविन स्टेम्ब्रिज': तो आप इसे असफल करना चाहते हैं या दो पंक्तियां डालना चाहते हैं? मेरी क्वेरी असफल हो जाएगी। – Quassnoi