Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर संग्रहीत कार्यविधि में xml स्ट्रिंग पैरामीटर पास करना

XML . प्रकार का पैरामीटर लेने के लिए अपनी संग्रहीत कार्यविधि को परिभाषित करें (ntext का प्रयोग न करें इसके बाद! यह बहिष्कृत है)। और sp_ . का उपयोग न करें आपकी संग्रहीत प्रक्रियाओं के लिए उपसर्ग - यह Microsoft द्वारा आंतरिक उपयोग के लिए एक आरक्षित उपसर्ग है और प्रदर्शन में गिरावट का कारण बनता है - कुछ और उपयोग करें! (या किसी भी उपसर्ग का प्रयोग बिल्कुल न करें)

 ALTER procedure [dbo].InsertCmsUser
      @xmlString XML
 AS
     ......

इसे आज़माएं (मूल . का उपयोग करके SQL सर्वर में XQuery विधियाँ 2005 और नया, बल्कि गन्दा OPENXML . के बजाय इंटरफ़ेस....):

;WITH CTE AS
(
    SELECT
        ContactID = XTbl.value('(ContactID)[1]', 'int'),
        FirstName = XTbl.value('(first_name)[1]', 'varchar(50)'),
        LastName = XTbl.value('(last_name)[1]', 'varchar(50)'),
        Company = XTbl.value('(company)[1]', 'varchar(50)')
    FROM 
        @input.nodes('/NewDataSet/Table') AS XD(XTbl)
)
INSERT INTO 
    dbo.Seg_RecipientsTemp (ContactID, first_name, last_name, company, last_updated)
    SELECT 
        ContactID,
        FirstName,
        LastName,
        Company,
        GETDATE()
    FROM
        CTE
    WHERE
        NOT EXISTS (SELECT * FROM dbo.Seg_RecipientsTemp WHERE ContactID = CTE.ContactID)

मुझे कोई email नहीं मिला आपके एक्सएमएल में विशेषता - सुनिश्चित नहीं है कि आप इसे कहां से प्राप्त करना चाहते हैं ....

अपडेट करें: ठीक है, तो ऐसा लगता है कि आपके पास <last_updated> . भी है आपके वास्तविक . में तत्व एक्सएमएल ....

<last_updated>2012-09-12T22:59:10.813+05:30</last_updated>

यह एक DATETIMEOFFSET जैसा दिखता है मेरे लिए - चूंकि इसमें +05:30 है समय क्षेत्र जोड़।

उस स्थिति में, इसके बजाय इस कोड का उपयोग करें:

;WITH CTE AS
(
    SELECT
        ContactID = XTbl.value('(ContactID)[1]', 'int'),
        FirstName = XTbl.value('(first_name)[1]', 'varchar(50)'),
        LastName = XTbl.value('(last_name)[1]', 'varchar(50)'),
        Company = XTbl.value('(company)[1]', 'varchar(50)'),
            LastUpdated = XTbl.value('(last_updated)[1]', 'datetimeoffset')
    FROM 
        @input.nodes('/NewDataSet/Table') AS XD(XTbl)
)
INSERT INTO 
    dbo.Seg_RecipientsTemp (ContactID, first_name, last_name, company, last_updated)
    SELECT 
        ContactID,
        FirstName,
        LastName,
        Company,
        LastUpdated
    FROM
        CTE
    WHERE
        NOT EXISTS (SELECT * FROM dbo.Seg_RecipientsTemp WHERE ContactID = CTE.ContactID)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एमएस एसक्यूएल का उपयोग करके अपडेट और ऑर्डर कैसे करें

  2. डेटा खोए बिना SQL डेटाबेस में कॉलम डेटाटाइप कैसे बदलें

  3. SQL सर्वर में डेटाबेस कैसे बनाएं

  4. मैं EntityFramework 7 और Asp.Net 5 का उपयोग करके SQL संग्रहीत कार्यविधि को कैसे कॉल कर सकता हूँ?

  5. जांचें कि क्या ऑब्जेक्ट SQL सर्वर में OBJECTPROPERTY() के साथ प्राथमिक कुंजी है