2010-09-22 13 views
20

मेरे पास निम्न तालिकाकॉपी पंक्तियों और आईडी स्तंभ को अद्यतन

alt text

मैं इसे करने के लिए उत्पाद बी डाला है और यह मेरे फिर 15

की एक आईडी देता है मेरे पास है परिभाषा तालिका जो निम्नानुसार है।

alt text

मैं कैसे इस का उपयोग करते हुए SQL कोड प्राप्त करने के लिए ProductDefinition पंक्तियों जहां prodid = 14 का चयन करें और एक ही दोहराने और निम्नलिखित

alt text

तरह prodid के लिए डालने = 15 करना चाहते हैं ?

+0

कौन सा एसक्यूएल स्वाद? MySQL, एमएसएसक्यूएल, ओरेकल? –

+0

माइक्रोसॉफ्ट एसक्यूएल सर्वर। – kalls

+1

यह होमवर्क है? –

उत्तर

42
INSERT INTO ProuctDefinition (ProdID, Definition, Desc) 
SELECT 
    xxx, Definition, Desc 
FROM 
    ProductDefinition 
WHERE 
    ProdID = yyy 

xxx अपने नए prodid है और yyy अपने पुराने एक है। यह भी मानता है कि DefID स्वचालित रूप से INSERT पर आबादी वाला है।

+0

यह सही है। – user29964

+0

आप क्वेरी को एक लूप में लपेट सकते हैं (निश्चित रूप से एक विशिष्ट गिनती के साथ) –

3

एसक्यूएल सर्वर 2008 पर MERGE उपयोग कर सकते हैं,, OUTPUT का उपयोग कर DefID मूल्यों वापस जाने के लिए का लाभ दिया है यह सोचते हैं कि वे स्वत: जनरेट जैसे हैं

MERGE INTO ProductDefinition 
USING (
     SELECT 16, P1.Definition, P1.Description 
     FROM ProductDefinition AS P1 
     WHERE P1.ProdID = 15 
    ) AS source (ProdID, Definition, Description) 
ON 0 = 1 
WHEN NOT MATCHED THEN 
    INSERT (ProdID, Definition, Description) 
    VALUES (ProdID, Definition, Description) 
    OUTPUT inserted.DefID, inserted.ProdID, 
      inserted.Definition, inserted.Description; 
7

यह आपके द्वारा चुने गए किसी भी कॉलम के साथ काम करेगा। न केवल प्राथमिक कुंजी/आईडी।

INSERT INTO TableName (Column1, CustomID, Column3, Column4, Column5) 
SELECT Column1, 'NewValue', Column3, Column4, Column5 FROM TableName 
WHERE CustomID='OrigValue' 
2

यदि आप सभी आइटम का चयन करने (हालत में तालिका नहीं किसी भी प्राथमिक कुंजी शामिल)

INSERT INTO [tabelName] 
SELECT * FROM [tabelName] 
WHERE (YourCondition) 

हालत में मेज एक प्राथमिक कुंजी शामिल हैं, केवल स्तंभों का चयन करना चाहते हैं कि नहीं प्राथमिक कुंजी की तरह :

INSERT INTO [tabelName] 
SELECT col_1,col_2,col_n FROM [tabelName] 
WHERE (YourCondition) 
1

आप इस तर्क एक ही मेज उपयोग में डेटा को दोहराने के लिए करना चाहते हैं:

पहले बयान जहां आप सम्मिलित करना चाहते ...

insert into [table](column1,column2) 

दूसरा है, जहां आप प्रविष्टि के लिए डेटा ले जाना चाहते से चुनें बयान ....

select (column1/'your value',column2/'your value') from [table] 

फिल्टर कौन-सी पंक्तियां आप चाहते हैं अब सेट सम्मिलित डुप्लिकेट

where (your condition) 

विभिन्न ग्राहकों के लिए समान डेटा दोहराना चाहते हैं, इसलिए मैंने इस क्वेरी का उपयोग किया है।

0

अपने आईडी AutoIncrement तो नहीं है या अनुक्रम की घोषणा की और एक अस्थायी तालिका बनाने के लिए चाहते हैं, तो यू न:

आप का उपयोग कर सकते हैं:

INSERT INTO Tabel1 SELECT ((ROW_NUMBER() OVER (ORDER BY ID )) + (SELECT MAX(id) FROM Table1)) ,column2,coulmn3,'NewValue' FROM Tabel1 Where somecolumn='your value` 
संबंधित मुद्दे