[SQL] 어떻게 SQL 서버 XML 열에서 값을 조회 할 수 있습니다
SQL어떻게 SQL 서버 XML 열에서 값을 조회 할 수 있습니다
나는 SQL Server 데이터베이스에서 XML 컬럼 (라는 역할)에 저장된 XML을 다음했다.
<root>
<role>Alpha</role>
<role>Beta</role>
<role>Gamma</role>
</root>
나는 그들에 특정 역할이 모든 행을 표시하고 싶습니다. 이 역할은 매개 변수로 통과시켰다.
해결법
-
==============================
1.
select Roles from MyTable where Roles.value('(/root/role)[1]', 'varchar(max)') like 'StringToSearchFor'
이 페이지는 더 어떻게 T-SQL 쿼리 XML 약을 보여줍니다 :
T-SQL을 사용하여 XML 필드를 쿼리
SQL 서버에서 XML 데이터를 편평
편집하다
조금 더 그와 함께 연주 후, 나는 사용이 적용 크로스 있다는이 놀라운 쿼리와 함께 끝났다. 이 사람은 당신이 당신과 같은 표현에 넣어 값에 대한 모든 행 (역할을)를 검색합니다 ...
이 테이블 구조를 감안할 때 :
create table MyTable (Roles XML) insert into MyTable values ('<root> <role>Alpha</role> <role>Gamma</role> <role>Beta</role> </root>')
우리는이처럼 조회 할 수 있습니다 :
select * from (select pref.value('(text())[1]', 'varchar(32)') as RoleName from MyTable CROSS APPLY Roles.nodes('/root/role') AS Roles(pref) ) as Result where RoleName like '%ga%'
당신은 여기에 SQL 바이올린을 확인할 수 있습니다 http://sqlfiddle.com/#!3/ae0d5/13
-
==============================
2.
declare @T table(Roles xml) insert into @T values ('<root> <role>Alpha</role> <role>Beta</role> <role>Gamma</role> </root>') declare @Role varchar(10) set @Role = 'Beta' select Roles from @T where Roles.exist('/root/role/text()[. = sql:variable("@Role")]') = 1
어디 COL 사용할 수있는 '% 베타 %'포함 등의 작업에 대한 쿼리를 원하는 경우
declare @T table(Roles xml) insert into @T values ('<root> <role>Alpha</role> <role>Beta</role> <role>Gamma</role> </root>') declare @Role varchar(10) set @Role = 'et' select Roles from @T where Roles.exist('/root/role/text()[contains(., sql:variable("@Role"))]') = 1
-
==============================
3.당신의 필드 이름이 역할하고있는 경우 테이블 이름은 검색 할를 사용할 수 있습니다 표입니다
당신의 필드 이름이 역할하고있는 경우 테이블 이름은 검색 할를 사용할 수 있습니다 표입니다
DECLARE @Role varchar(50); SELECT * FROM table1 WHERE Roles.exist ('/root/role = sql:variable("@Role")') = 1
-
==============================
4.나도 기억하기 쉬운 주변에있는 아래 간단한 작업을 함께했다 :-)
나도 기억하기 쉬운 주변에있는 아래 간단한 작업을 함께했다 :-)
select * from (select cast (xmlCol as varchar(max)) texty from myTable (NOLOCK) ) a where texty like '%MySearchText%'
-
==============================
5.다음을 수행 할 수
다음을 수행 할 수
declare @role varchar(100) = 'Alpha' select * from xmltable where convert(varchar(max),xmlfield) like '%<role>'+@role+'</role>%'
분명히 이것은 해킹의 비트는 내가 어떤 공식적인 솔루션을 추천하지 않을 것입니다. SQL 서버 2012은 SQL Server Management Studio에서 XML 컬럼에 애드혹 쿼리를 수행 할 때 그러나 나는이 기술은 매우 유용을 찾을 수 있습니다.
-
==============================
6.나는 SQL 테이블에서 XML의 값을 검색하는 문 아래를 사용
나는 SQL 테이블에서 XML의 값을 검색하는 문 아래를 사용
with xmlnamespaces(default 'http://test.com/2008/06/23/HL.OnlineContract.ValueObjects') select * from ( select OnlineContractID, DistributorID, SponsorID, [RequestXML].value(N'/OnlineContractDS[1]/Properties[1]/Name[1]', 'nvarchar(30)') as [Name] ,[RequestXML].value(N'/OnlineContractDS[1]/Properties[1]/Value[1]', 'nvarchar(30)') as [Value] ,[RequestXML].value(N'/OnlineContractDS[1]/Locale[1]', 'nvarchar(30)') as [Locale] from [OnlineContract]) as olc where olc.Name like '%EMAIL%' and olc.Value like '%EMAIL%' and olc.Locale='UK EN'
-
==============================
7.유용한 팁. SQL 서버 XML 열에서 값을 쿼리 (네임 스페이스와 XML)
유용한 팁. SQL 서버 XML 열에서 값을 쿼리 (네임 스페이스와 XML)
EG
Table [dbo].[Log_XML] contains columns Parametrs (xml),TimeEdit (datetime)
EG CML YN Parametrs :
<ns0:Record xmlns:ns0="http://Integration"> <MATERIAL>10</MATERIAL> <BATCH>A1</BATCH> </ns0:Record>
예를 들어, 검색어 :
select Parametrs,TimeEdit from [dbo].[Log_XML] where Parametrs.value('(//*:Record/BATCH)[1]', 'varchar(max)') like '%A1%' ORDER BY TimeEdit DESC
from https://stackoverflow.com/questions/10344553/how-can-i-query-a-value-in-sql-server-xml-column by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 두 MySQL의 테이블을 병합 할 수 있습니다? (0) | 2020.03.21 |
---|---|
[SQL] 어떻게 아포스트로피 (작은 따옴표)를 포함하는 값을 삽입하려면? (0) | 2020.03.21 |
[SQL] SELF 무엇을 가입하고 당신이 그것을 할 때를 사용해야합니까? [복제] (0) | 2020.03.21 |
[SQL] 저장 프로 시저에서 "SET XACT_ABORT ON"을 사용의 이점은 무엇입니까? (0) | 2020.03.21 |
[SQL] 단지 null이 아닌 값을 선택 MYSQL (0) | 2020.03.21 |