화폐 금액을 생성하는 XML이 있는데, 이는 종종 통화 변환의 결과이므로 정확한 정도 (이 경우 4dp)로 표시해야합니다. 목록에있는 번호로 XML을 생성 할 수 있지만 XML에 스키마를 적용하자마자 모든 "불필요한"0 자리가 제거된다는 것을 알게되었습니다. 컴퓨터의 관점에서 이것을 이해할 수는 있지만 각 번호의 가치에 관계없이 번호 정확도가 모든 숫자에 정확히 표시되어야합니다. 이해를 돕기 위해 우리는 항상 그러한 숫자에 정확하게 4 자리 소수점을 표시한다는 점에서 일관성이 있다면 훨씬 명확합니다.10 진수 소수점 자리 표시 자 10 진수 SimpleType으로 표현하십시오.
/*
This script will create a schema collection, use it and drop it, so there is minimal chance of mess left behind
*/
DECLARE @XSD XML
SET @XSD = CONVERT(XML,
'<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="xs3p.xsl"?>
<xs:schema id="MyData"
targetNamespace="http://tempuri.org/MyData.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/MyData.xsd"
xmlns:mstns="http://tempuri.org/MyData.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="Money">
<xs:restriction base="xs:decimal">
<xs:totalDigits value="14" />
<xs:fractionDigits value="4" />
</xs:restriction>
</xs:simpleType>
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element name="Amount" type="Money" minOccurs="1" maxOccurs="unbounded">
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>')
-- Clean if there is owt to clean
IF EXISTS (SELECT * FROM sys.xml_schema_collections WHERE name = 'TestMoney')
DROP XML SCHEMA COLLECTION TestMoney
-- use our xml bit above to make a new schema collection
CREATE XML SCHEMA COLLECTION TestMoney AS @XSD
GO
-- we'll create our xml untyped first, so we can check it before we change it
DECLARE @Untyped_XML XML
-- this is the real test, with the schema enforced
DECLARE @XML XML(TestMoney)
-- build some test data
SET @Untyped_XML =
'<?xml version ="1.0"?>
<Root xmlns ="http://tempuri.org/MyData.xsd">
<Amount>1.0000</Amount>
<Amount>0.1234</Amount>
</Root>'
-- try to apply the schema collection to our xml, and show something useful whatever happens.
BEGIN TRY
SET @XML = @Untyped_XML
SELECT @Untyped_XML AS Before, @XML AS [After]
END TRY
BEGIN CATCH
SELECT
ERROR_MESSAGE() AS Problem
,@Untyped_XML AS FailedXML
END CATCH
GO
-- We don't really want this schema; it was just a test
DROP XML SCHEMA COLLECTION TestMoney
전체 정확성에 표시되는 번호를 강제로 어떤 방법이 있나요 : 여기가 내 말은 (전 결과 후 비교) 무엇을보고 실행할 수있는 예는?
필자는 잠시 동안 패턴 일치를 사용하여 결과가 패턴과 일치하는 방식으로 표시되도록하는 희망에서 소수점 네 자리를 요구한다고 생각했습니다. 슬프게도 정수의 정규형에는 소수점이 없으므로 단위 값 뒤에 '.0000'을 입력해도 패턴 일치에 실패합니다. 따라서' '를 단순 유형에 추가하면 오류가 발생합니다. 이 [msdn 기사] (http://msdn.microsoft.com/en-us/library/bb510416.aspx)를 참조하십시오. 모든 정수를 문자열로 변환하고 싶지는 않습니다. ..! –
아마도이 문제를 해결할 수있는 방법은 xml에 스타일 시트를 적용하여 실제로 값을 변경하지 않고보기 좋게 만드는 것이라고 생각하기 시작했습니다. 나는 이것을 생각하지만 최소한의 지식을 가지고있다. 그것은 SQL Server 내에서 xslt 변환을 적용하는 데 코딩을 사용해야하는 것 같습니다. 그것은 내 ken을 넘어서는 길입니다. XML 파일을 저장하기 위해 SSIS 패키지를 사용하고 있습니다. 아마도 변환을 적용 할 장소가 될까요? 이것이 올바른 접근법이라면 어떤 포인터라도 사용하면 좋습니다! [this?] (http://www.w3schools.com/xsl/el_decimal-format.asp) –