এসকিউএল সার্ভারে দৃQu়ভাবে টাইপযুক্ত এক্সএমএল উপাদানের মানকে এক্সকিউয়ের সাথে প্রতিস্থাপন করুন


10

কোনও এলএমএল দেওয়া হয়েছে, এটি একটি এক্সএমএল স্কিমা সংগ্রহের মধ্যে সংজ্ঞায়িত:

<xsd:element name="xid">
    <xsd:simpleType>
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="32" />
        </xsd:restriction>
    </xsd:simpleType>
</xsd:element>

আপনি কীভাবে এক্সকিউরি ব্যবহার করে উপাদানটি আপডেট করবেন?

উপাদানটি স্কিমা সংগ্রহের এনএস নেমস্পেসের মধ্যে পাওয়া যায় । আমি নীচের ক্যোয়ারীটি উপাদানটি আপডেট করার চেষ্টা করেছি:

update cm.item
   set data.modify(
    'declare namespace ns="http://www.anon.com"; 
     replace value of (/ns:*/ns:xid)[1] with "X00011793" cast as element(ns{http://www.anon.com}:xid,#anonymous) ?') 
 where id = 11793

তবে এটি নিম্নলিখিত ত্রুটি উত্পন্ন করে:

এমএসজি 9301, স্তর 16, রাজ্য 1, লাইন 2 এক্সকিউয়ারি [সেমি। দয়া করে 'castালাই হিসাবে?' বাক্য গঠন.

আমি যদি পুরোপুরি castালাই অপসারণ করি এবং এই ক্যোয়ারীটি ব্যবহার করি:

update cm.item
   set data.modify(
    'declare namespace ns="http://www.anon.com"; 
     replace value of (/ns:*/ns:xid)[1] with "X00011793"') 
 where id = 11793

আমি এই ত্রুটি পেয়েছি:

এমএসজি 2247, স্তর 16, রাজ্য 1, লাইন 2 এক্সকিউরি [সেমি.াইটেম.ডাটা.মডিফায়েড ()]: মানটি "xs: স্ট্রিং" টাইপের, যা প্রত্যাশিত ধরণের "<বেনামে>" এর উপপ্রকার নয়।

যদি আমি এই প্রশ্নটি ইস্যু করি:

update cm.item
   set data.modify(
      'declare namespace ns="http://www.anon.com/"; 
       replace value of (/ns:*/ns:xid/text())[1] with "X00011793"')
 where id = 11793

আমি এই ত্রুটি পেয়েছি:

এমএসজি 12৩১২, স্তর ১ 16, রাজ্য ১, লাইন ২ এক্সকিউয়ারি [সে.মি..াইটেম.ডাটা.মডিফায়েড ()]: 'পাঠ্য ()' সাধারণ টাইপড বা ' http://www.w3.org/2001/XMLSchema- তে সমর্থিত নয় # কোনও টাইপ 'উপাদান, পাওয়া গেছে' (উপাদান (এনএস { http://www.anon.com/ }: xid, # বেনামী)?) * '।

আমি এসকিউএল সার্ভারকে লক্ষ্য করছি 2008 আর 2।

ধন্যবাদ!

উত্তর:


6

আমি replace value ofবেনামে সহজ ধরণের সংজ্ঞা দিয়ে কাজ করতে বিবৃতিটি সংশোধন করার সহজ উপায় খুঁজে পাইনি ।

আপনার কাছে যা আছে তার সরল তিরস্কার:

drop xml schema collection dbo.SimpleTypeTest;

go

create xml schema collection dbo.SimpleTypeTest as 
N'<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="xid">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:maxLength value="30"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>';

go

declare @X xml(document dbo.SimpleTypeTest) = '<root><xid>1</xid></root>';

set @X.modify('replace value of /root/xid  with "2"');

ফলাফল:

এমএসজি 2247, স্তর 16, রাজ্য 1, লাইন 25 এক্সকিউরি [পরিবর্তন করুন ()]: মানটি "xs: স্ট্রিং" টাইপের, যা প্রত্যাশিত ধরণের "<নামবিহীন>" এর উপপ্রকার নয়।

একটি কর্মপরিকল্পনা হ'ল একটি নামযুক্ত সাধারণ প্রকারটি ব্যবহার করতে আপনার স্কিমাটি পরিবর্তন xidTypeকরে নতুন মানটি castালাই করা।

drop xml schema collection dbo.SimpleTypeTest;

go

create xml schema collection dbo.SimpleTypeTest as 
N'<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="xid" type="xidType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:simpleType name="xidType">
        <xs:restriction base="xs:string">
            <xs:maxLength value="30"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>';

go

declare @X xml(document dbo.SimpleTypeTest) = '<root><xid>1</xid></root>';

set @X.modify('replace value of /root/xid  with "2" cast as xidType?');

আর একটি উপায় হ'ল এক্সএমএলটি একটি টাইপযুক্ত এক্সএমএল ভেরিয়েবলে এক্সট্রাক্ট করা, ভেরিয়েবলটি সংশোধন করে আবার টেবিলে রেখে দেওয়া।

drop xml schema collection dbo.SimpleTypeTest;

go

create xml schema collection dbo.SimpleTypeTest as 
N'<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="xid">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:maxLength value="30"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>';

go

declare @X xml(document dbo.SimpleTypeTest) = '<root><xid>1</xid></root>';
declare @X2 xml = @X;

set @X2.modify('replace value of (/root/xid/text())[1]  with "2"');
set @X = @X2;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.