यदि आप प्रत्येक पंक्ति में से केवल एक मान चाहते हैं तो cross apply
. का उपयोग करने की कोई आवश्यकता नहीं है ।
select XMLCol.value('(/*[local-name()=sql:variable("@Root")]
/*[local-name(.)=sql:variable("@Entity")]
/*[local-name(.)=sql:variable("@ParentNode")]
/*[local-name(.)=sql:variable("@Separator")]
/*[local-name(.)=sql:variable("@ChildNode")])[1]', 'varchar(max)')
from XMLTable
इसे प्राप्त करने का दूसरा तरीका FLWOR का उपयोग करना है। . मेरे सीमित परीक्षणों में यह थोड़ा तेज चलेगा।
select XMLCol.value('(for $n1 in /*,
$n2 in $n1/*,
$n3 in $n2/*,
$n4 in $n3/*,
$n5 in $n4/*
where $n1[local-name(.) = sql:variable("@Root")] and
$n2[local-name(.) = sql:variable("@Entity")] and
$n3[local-name(.) = sql:variable("@ParentNode")] and
$n4[local-name(.) = sql:variable("@Separator")] and
$n5[local-name(.) = sql:variable("@ChildNode")]
return $n5
)[1]', 'varchar(max)')
from XMLTable