설명:
원시 모드는 쿼리 결과 집합의 각 행을
요소 이름을 가진 xml 요소로 변환하고, 각 행의 열을 행 속성으로 변환합니다.
중첩된 FOR XML 쿼리를 작성하여 XML 계층 구조를 생성할 수 있습니다.
기본적으로 null이 아닌 모든 값은
요소의 속성으로 매핑됩니다.
쿼리 결과 집합의 데이터를
요소의 하위 요소로 변환해야 하는 경우
구문:
FOR XML RAW [ ('ElementName') ] [ <CommonDirectives> [ , { XMLDATA | XMLSCHEMA [ ('TargetNameSpaceURI') ]} ] [ , ELEMENTS [ XSINIL | ABSENT ] ] <CommonDirectives> ::= [ , BINARY BASE64 ] [ , TYPE ] [ , ROOT [ ('RootName') ] ]
테이블 베이스를 생성합니다. 테이블 구조는 다음과 같습니다.예문:다음과 같이 테이블 데이터를 삽입합니다.
列名 数据类型 允许空 id int 允许 body nvarchar(50) 允许
id body 1 aaaa 2 bbbb 3 cccc 4
A. 쿼리 데이터의 정보를 반환하고 for xml 원시 모드/* 结果: <row id="1" body="aaaa" /> <row id="2" body="bbbb" /> <row id="3" body="dddd" /> <row id="4" /> */select * from base for xml raw;로그인 후 복사
를 사용하여 결과 세트는 ELEMENTS 지시문을 지정하여 하위 요소 형태로 나타납니다./* 结果: <row> <id>1</id> <body>aaaa</body> </row> <row> <id>2</id> <body>bbbb</body> </row> <row> <id>3</id> <body>dddd</body> </row> <row> <id>4</id> </row> */select * from base for xml raw,elements;로그인 후 복사
이 예제 문장에서는 ID가 4인 본문이 표시되지 않는 것을 확인했습니다. 그 이유는 elements 명령어를 사용할 때, 다음 명령어를 지정하지 않으면 기본적으로 abscent가 사용되기 때문인데, 현재는 null 값에 대해 어떤 요소도 생성되지 않기 때문이다. 다음 예제 문장에서는 xsinil 요소를 사용하여 xml에 null 값을 표시할 수 있습니다.B. 요소 지시문과 xsinil 지시문을 모두 지정하여 null을 생성합니다. 열 값 요소/* 结果: <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <id>1</id> <body>aaaa</body> </row> <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <id>2</id> <body>bbbb</body> </row> <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <id>3</id> <body>dddd</body> </row> <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <id>4</id> <body xsi:nil="true" /> </row> */select * from base for xml raw,elements xsinil;로그인 후 복사
은 각 데이터를요소로 표시하므로
요소 이름을 다른 이름으로 수정하는 방법은 무엇입니까? ; 요소
우리 모두는 모든 xml 파일에 루트 요소가 있다는 것을 알고 있습니다. 이 xml 텍스트와 해당 루트 요소의 이름을 어떻게 바꾸나요? xml용으로 생성된 xml의 경우 루트 요소/* 结果: <baseinfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <id>1</id> <body>aaaa</body> </baseinfo> <baseinfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <id>2</id> <body>bbbb</body> </baseinfo> <baseinfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <id>3</id> <body>dddd</body> </baseinfo> <baseinfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <id>4</id> <body xsi:nil="true" /> </baseinfo> */select * from base for xml raw('baseinfo'),elements xsinil;로그인 후 복사
를 사용하여 루트 지시문의 기본 루트 요소는 입니다. 현재 생성된 xml 결과는 매우 좋아 보이지만, 데이터베이스의 body 열을 xml의 요소로 변경하려면 어떻게 수정해야 할까요? 요소 이름/* 结果: <base xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <baseinfo> <id>1</id> <body>aaaa</body> </baseinfo> <baseinfo> <id>2</id> <body>bbbb</body> </baseinfo> <baseinfo> <id>3</id> <body>dddd</body> </baseinfo> <baseinfo> <id>4</id> <body xsi:nil="true" /> </baseinfo> </base> */select * from base for xml raw('baseinfo'),root('base'),elements xsinil;로그인 후 복사/* 结果: <base xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <baseinfo> <id>1</id> <data>aaaa</data> </baseinfo> <baseinfo> <id>2</id> <data>bbbb</data> </baseinfo> <baseinfo> <id>3</id> <data>dddd</data> </baseinfo> <baseinfo> <id>4</id> <data xsi:nil="true" /> </baseinfo> </base> */select id,body data from base for xml raw('baseinfo'),root('base'),elements xsinil;로그인 후 복사
현재 결과는 기본적으로 xml의 기본 형식을 따릅니다. 그런 다음 id 및 body 열에 이름이 지정되지 않으면 루트 요소 이름도 없다고 가정합니다. 요소명을 지정하지 않으면 어떤 단점이 생기나요?그런데 위 결과에서는 데이터 각각을 구별할 수 없는 것 같고, id가 4로 null 값이 표시되지 않고, 수정하는 방법은 다음 문장을 참고하세요./* 结果: 1aaaa2bbbb3dddd4 */ --因为id为int类型,为使id不出现列名,我们使id+0 --因为body为nvarchar类型,为使body不出现列名,我们使body+''select id+0,body+'' from base for xml raw(''), elements;로그인 후 복사이제부터 컬럼 이름이 없다는 장점을 본 것 같습니다. 사실 이전 문장은 좀 더 수정이 가능합니다./* 结果: 1,aaaa;2,bbbb;3,dddd;4,null; */select id+0,',',isnull(body,'null')+'',';' from base for xml raw(''),elements;로그인 후 복사
결과가 다른 방식으로 나타나도록 다시 수정해 보겠습니다./* 结果: 1,aaaa;2,bbbb;3,dddd;4,null; */select convert(nvarchar,id)+','+isnull(body,'null')+';' from base for xml raw(''),elements;로그인 후 복사/* 结果: {1,aaaa}{2,bbbb}{3,dddd}{4,null} */select '{'+convert(nvarchar,id)+','+isnull(body,'null')+'}' from base for xml raw(''),elements;로그인 후 복사
이제 Combine이 가능하다는 것을 알 수 있습니다. 필요에 따라 필요한 결과를 생성해야 합니다.
SQLServer2005에서는 xml 데이터 유형이 지원되므로 TYPE 명령을 작성하여 xml 데이터에 FOR XML 쿼리 결과를 반환할 수 있습니다. type.type의 예는 다음과 같습니다.마지막으로 일반적인 예를 사용하여 xml raw 모드에 대한 응용 프로그램을 소개합니다.declare @string nvarchar(1000)declare @xml xml/* 消息257,级别16,状态3,第8行 不允许从数据类型xml到nvarchar的隐式转换。请使用CONVERT函数来运行此查询。 */ --set @string=(select id,body from base for xml raw,type)set @xml=(select id,body from base for xml raw,type)로그인 후 복사
학생 테이블 만들기 , 테이블 구조는 다음과 같습니다.다음과 같이 테이블 데이터를 삽입합니다.
建课程表sclass,表结构如下:
列名 数据类型 允许空 cid int 允许 name nvarchar(50) 允许 插入表数据如下:
id name 1 语文 2 数学 3 英语
建student_class表,表结构如下:
列名 数据类型 允许空 sid int cid int 插入数据如下:
cid sid 1 1 1 2 1 3 2 1 3 2 3 3
至此,数据结果是:
姓名 课程 张三 语文 张三 数学 张三 英语 李四 语文 王五 数学 王五 英语
我们需要最后的结果形式如下:
姓名 课程 张三 语文,数学,英语 李四 语文 王五 数学,英语
该如何实现呢?
/* 结果: 张三 语文,数学,英语 李四 语文 王五 数学,英语 */select [name], stuff( ( select ','+[name] from sclass where cid in ( select cid from student_class where student.sid=student_class.sid ) for xml raw(''),elements ), 1,1,'') sclassfrom student로그인 후 복사위 내용은 FOR XML의 RAW 모드에 대한 코드 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!