Es ist ein bisschen wie mit einem Hammer sehen zu gebutterten Toast zu machen, aber Sie können die Regex Unterstützung in dem XML-Datentyp über die Muster Facette verwenden. Dann bestimmen Sie, ob die Regex übereinstimmt oder nicht, indem Sie versuchen, als typisiertes XML zu analysieren. Wenn Sie mit err 6926 zum catch-Block springen, stimmt Ihre Regex nicht überein (simple type validation err). Hier ist ein Beispiel, das die regex von 3 Dezimalstellen gefolgt von 6 Buchstaben erzwingt:
create xml schema collection regexTest1 as '<xs:schema targetNamespace="http://example/regexTest"
elementFormDefault="qualified"
xmlns="http://example/regexTest"
xmlns:mstns="http://tempuri.org/XMLSchema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="regexTest">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\p{Nd}{3}\p{L}{6}"></xs:pattern>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>'
declare @x xml(dbo.regexTest1), @regexPass bit
begin try
set @x = '<regexTest xmlns="http://example/regexTest">111abcdef</regexTest>'
set @regexPass=1
end try
begin catch
if (error_number()=6926)
begin
set @regexPass=0
end
else begin
declare @errMsg varchar(8000), @errSev int, @errState int
select @errMsg='Regex check was unable to process, native error: ('
+ cast(error_number() as varchar(16))
+ ') - '
+ error_message(),
@errSev=error_severity(),
@errState=error_state()
raiserror(@errMsg, @errSev, @errState)
end
end catch
select @regexPass
Bearbeiten - wenn Sie diesen Weg gehen, die Spezifikation für die regex Unterstützung in XSD ist bei http://www.w3.org/TR/xmlschema-2/#dt-regex
ich vorausgesetzt, Sie Fragen über MSSQL-Server auf der Grundlage der anderen Antworten, lesen Sie erneut Ihre Frage Ich denke, ich bin nicht so sicher. Kannst du klären, welche db? – ahains
Ja, es ist MsSQL. – Neale