2012-02-06 18 views
6

के साथ मानों में सम्मिलित करें, मैं प्रोग्रामिंग रूप से मेरी तालिका में मान दर्ज करने का प्रयास कर रहा हूं।खंड

मैं सीधे चयन @ variables का उपयोग नहीं कर सकता। मुझे कीवर्ड मानों का उपयोग करना होगा।

डालने में मानों का उपयोग करते समय मैं कहां से क्लॉज बना सकता हूं।

मैं तुम्हें लगता है कि MyID स्तंभ डुप्लीकेट शामिल नहीं है बनाने की कोशिश कर रहे हैं, तो डुप्लिकेट

DECLARE @MyID INT 
    DECLARE @Phone varchar(10) 
    DECLARE @MyDATE DateTime 
    DECLARE @Agent as varchar(50) 
    DECLARE @Charge as varchar(50) 
    DECLARE @Vendor as varchar(50) 

    SET @MyID = 215199999 
    SET @Phone = '9999999999' 
    SET @MyDATE = '2010-12-04 11:56:12.000' 
    SET @Agent = 'fbrown' 
    SET @Charge = 'NO' 
    SET @Vendor = 'NO' 

    INSERT INTO [MyDB].[dbo].[Accounts] 
    (MyID,Phone,MyDate,Agent,Charge,Vendor) 
    VALUES (
    @MyID 
    ,@Phone 
    ,@MyDATE 
    ,@Agent 
    ,@Charge 
    ,@Vendor 
) WHERE MyID NOT IN (@MyID) 
+0

आप किसी सम्मिलन पर एक खंड का उपयोग क्यों करेंगे? क्या आप वास्तव में गैर-डुप्लीकेट डालने की कोशिश कर रहे हैं? –

+0

हां। डुप्लीकेट –

+0

से बचने की कोशिश कर रहा है यह एक अवधारणा नहीं है। यदि आप किसी अन्य क्वेरी से डेटा का चयन कर रहे हैं, तो डेटा स्रोत पर 'WHERE' क्लॉज समझ में आता है। – HABO

उत्तर

22
IF NOT EXISTS(SELECT 1 FROM [MyDB].[dbo].[Accounts] WHERE MyID = @MyID) 
    INSERT INTO [MyDB].[dbo].[Accounts] 
     (MyID, Phone, MyDate, Agent, Charge, Vendor) 
     VALUES 
     (@MyID, @Phone, @MyDATE, @Agent, @Charge, @Vendor) 
1

से बचने के लिए कोशिश कर रहा हूँ, आप कम से कम 3 विकल्प हैं: 1) बनाने कॉलम अद्वितीय (उस कॉलम पर एक इंडेक्स बनाएं और इसे अनन्य, या बेहतर, अभी तक एक प्राथमिक कुंजी घोषित करें) 2) कॉलम ऑटो-वृद्धि करें। इस तरह, आपको मूल्यों को असाइन करने की भी आवश्यकता नहीं है। 4) आप जो स्टीफनेल्ली के समाधान (इस धागे पर) का उपयोग कर सकते हैं। यह प्रोग्रामर मित्रवत है और आपको इच्छित मूल्य निर्दिष्ट करने के लिए अनुमति देता है।

3

if not exists (select top 1 * from [MyDB].[dbo].[Accounts] Where MyID = @MyID) 
INSERT INTO [MyDB].[dbo].[Accounts] 
    (MyID,Phone,MyDate,Agent,Charge,Vendor) 
    VALUES (
    @MyID 
    ,@Phone 
    ,@MyDATE 
    ,@Agent 
    ,@Charge 
    ,@Vendor 
) 
+2

यह http://stackoverflow.com/a/9166197/496972 –

+0

हाँ का एक डुप्लिकेट है, हाँ, आप सही हैं, मैंने पोस्टिंग के दौरान जो जवाब नहीं देखा है .. –

+0

यदि वास्तव में मैं अपनी पोस्ट को हटाना चाहता हूं, तो बस अपडेट करें मैं तो मैं अपनी पोस्ट –

0

इसके अलावा मर्ज का उपयोग करके देखें (Upsert) विकल्प एक भी अमल के लिए एक अच्छा विकल्प है। इस उदाहरण में जब मिलान किया जाता है तो भर नहीं जाता है, लेकिन आप मिलान किए गए कथन को जोड़ सकते हैं और टाइमस्टैम्प या काउंटर अपडेट कर सकते हैं।

MERGE 
    Accounts AS target 
USING 
(select @MyID as myID) AS source 
ON 
    target.myID = source.myID 

WHEN NOT MATCHED THEN 
INSERT (MyID,Phone,MyDate,Agent,Charge,Vendor) 
    VALUES (
    @MyID 
    ,@Phone 
    ,@MyDATE 
    ,@Agent 
    ,@Charge 
    ,@Vendor 
); 
+0

Ps हटा सकते हैं यह विषय 4,5 साल पुराना है। :-) – Tenzin

+4

@ टेंज़िन तो क्या? इसका मतलब यह नहीं है कि लोग अब एक ही प्रश्न के उत्तर की तलाश नहीं करते हैं – DixonD