Как получить значение подстроки из столбца Sql типа varbinary?
Я пытаюсь получить подстроку, FIRST_NAME
, значение атрибута от ADDRESS_XML
столбец в таблице с помощью простого запроса выбора. Тип столбца varbinary(1000)
,
GetXml
это пользовательский метод, определенный в другом месте, который работает нормально.
Мой пункт где
dbo.GetXml(ADDRESS_XML).exist('xpathExpression') = 1
Ниже приводится одна строка столбца ADDRESS_XML:
<PostalAddress xmlns="http://tempuri.org/PostalAddress.xsd">
<PostalAddress TITLE="Mr" FIRST_NAME="John" LAST_NAME="SMITH"
ADDRESS="207a Stratford Road, Shirley" CITY="Solihull"
COUNTY="West Midlands" POSTCODE="B90 3AH"
COUNTRY="United Kingdom" CONTACT_INFO=""
EMAIL_ADDRESS="" PHONENO="" />
</PostalAddress>
Каким должно быть выражение XPath?
Я использую SQL Server 2008 R2 Express В столбце varbinary хранится строка в шестнадцатеричном формате, поэтому я использую собственный метод GetXml().
2 ответа
Ты можешь использовать sql:variable()
использовать переменную в предикате в exist
функция.
declare @FirstName nvarchar(100) = 'John';
with xmlnamespaces(default 'http://tempuri.org/PostalAddress.xsd')
select *
from T
where dbo.GetXml(ADDRESS_XML).exist('/PostalAddress/PostalAddress[@FIRST_NAME = sql:variable("@FirstName")]') = 1;
Или против постоянного значения в xPath
with xmlnamespaces(default 'http://tempuri.org/PostalAddress.xsd')
select *
from T
where dbo.GetXml(ADDRESS_XML).exist('/PostalAddress/PostalAddress[@FIRST_NAME = "John"]') = 1;
Так как вы спросили, вот выражение XPath, чтобы получить FIRST_NAME
атрибут:
/PostalAddress/PostalAddress/@FIRST_NAME
или если вы хотели получить <PostalAddress>
имеющий FIRST_NAME
значение атрибута равно 1
:
/PostalAddress/PostalAddress[@FIRST_NAME='1']
Может потребоваться сначала зарегистрировать пространство имен по умолчанию ( MSDN: указание пространства имен по умолчанию). Хотя я не уверен, как вы намеревались использовать XPath.