XML 스키마를 사용하여 SQL Server에서 열거 유형을 만들 수 있습니다.
예를 들어 색상.
create xml schema collection ColorsEnum as '
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Color">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Red"/>
<xs:enumeration value="Green"/>
<xs:enumeration value="Blue"/>
<xs:enumeration value="Yellow"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>';
이를 통해 유형의 변수 또는 매개 변수를 사용할 수 있습니다 xml(dbo.ColorsEnum)
.
declare @Colors xml(dbo.ColorsEnum);
set @Colors = '<Color>Red</Color><Color>Green</Color>'
색이 아닌 것을 추가하려고하면
set @Colors = '<Color>Red</Color><Color>Ferrari</Color>';
오류가 발생합니다.
Msg 6926, Level 16, State 1, Line 43
XML Validation: Invalid simple type value: 'Ferrari'. Location: /*:Color[2]
이와 같이 XML을 구성하는 것은 약간 지루할 수 있으므로 예를 들어 허용 된 값을 보유하는 도우미보기를 만들 수 있습니다.
create view dbo.ColorsConst as
select cast('<Color>Red</Color>' as varchar(100)) as Red,
cast('<Color>Green</Color>' as varchar(100)) as Green,
cast('<Color>Blue</Color>' as varchar(100)) as Blue,
cast('<Color>Yellow</Color>' as varchar(100)) as Yellow;
그리고 이것을 사용하여 열거를 만듭니다.
set @Colors = (select Red+Blue+Green from dbo.ColorsConst);
XML 스키마에서 동적으로보기를 작성하려면이 조회를 사용하여 색상을 추출 할 수 있습니다.
select C.Name
from (select xml_schema_namespace('dbo','ColorsEnum')) as T(X)
cross apply T.X.nodes('//*:enumeration') as E(X)
cross apply (select E.X.value('@value', 'varchar(100)')) as C(Name);
열거는 물론 함수와 프로 시저에 대한 매개 변수로 사용될 수도 있습니다.
create function dbo.ColorsToString(@Colors xml(ColorsEnum))
returns varchar(100)
as
begin
declare @T table(Color varchar(100));
insert into @T(Color)
select C.X.value('.', 'varchar(100)')
from @Colors.nodes('Color') as C(X);
return stuff((select ','+T.Color
from @T as T
for xml path('')), 1, 1, '');
end
create procedure dbo.GetColors
@Colors xml(ColorsEnum)
as
select C.X.value('.', 'varchar(100)') as Color
from @Colors.nodes('Color') as C(X);
declare @Colors xml(ColorsEnum) = '
<Color>Red</Color>
<Color>Blue</Color>
';
select dbo.ColorsToString(@Colors);
set @Colors = (select Red+Blue+Green from dbo.ColorsConst);
exec dbo.GetColors @Colors;