다음을 통해 공유


정규 형식 및 패턴 제한 사항

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

XSD 패턴 패싯을 사용하면 단순 형식의 어휘 공간을 제한할 수 있습니다. 가능한 어휘 표현이 두 개 이상 있는 형식에 패턴 제한을 두면 유효성 검사 시 일부 값이 예기치 않은 동작을 일으킬 수 있습니다.

이 동작은 이러한 값의 어휘 표현이 데이터베이스에 저장되지 않기 때문에 발생합니다. 따라서 값은 출력으로 serialize될 때 정식 표현으로 변환됩니다. 정식 양식이 형식에 대한 패턴 제한을 준수하지 않는 값이 문서에 포함된 경우 사용자가 다시 삽입하려고 하면 문서가 거부됩니다.

이를 방지하기 위해 SQL Server는 정식 양식의 패턴 제한 위반으로 인해 다시 삽입할 수 없는 값이 포함된 XML 문서를 거부합니다. 예를 들어 값 "33.000"은 패턴 제한이 "33\.0+"인 xs:decimal에서 파생된 형식에 대해 유효성을 검사하지 않습니다. "33.000"은 이 패턴을 준수하지만 정식 형식인 "33"은 그렇지 않습니다.

따라서 부울, 10진수, 부동 소수점, double, dateTime, time, date, hexBinarybase64Binary와 같은 기본 형식에서 파생된 형식에 패턴 패싯을 적용할 때는 주의해야 합니다. 이러한 구성 요소를 스키마 컬렉션에 추가할 때 SQL Server에서 경고를 발생합니다.

부동 소수점 값의 부정확한 직렬화에는 비슷한 문제가 있습니다. SQL Server에서 사용하는 부동 소수점 직렬화 알고리즘으로 인해 비슷한 값이 동일한 정식 형식을 공유할 수 있습니다. 부동 소수점 값이 직렬화된 다음 다시 삽입되면 해당 값이 약간 변경될 수 있습니다. 드물지만 이로 인해 값을 다시 삽입한 경우 값이 해당 형식에 대해 enumeration, minInclusive, minExclusive, maxInclusive또는 maxExclusive와 같은 패싯 중 하나를 위반할 수 있습니다. 이를 방지하기 위해 SQL Server는 파생되거나 xs:floatxs:double serialize 및 다시 삽입할 수 없는 형식의 값을 거부합니다.

참고 항목