在SQL Server中,如果表中包含XML数据类型的列,通常需要验证这些XML数据是否符合特定的XSD(XML SchemaDefinition)文件。通常,这需要编写.NET代码或创建Windows应用程序来实现。然而,本文将介绍一种在SQL Server内部管理所有步骤的简便方法,无需编写复杂的.NET代码或创建应用程序。
假设有一个SQL表,其中包含一个XML数据类型的列。目标是验证这个列中的数据是否符合一个有效的XSD文件。在本文中,将展示如何在SQL Server中使用一些简单的步骤来完成这项任务,而不需要编写.NET代码或创建Windows应用程序。
首先,需要在SQL Server2008 R2中创建一个名为'XMLValidateWithXSD'的数据库。
USE [master]
GO
CREATE DATABASE [XMLValidateWithXSD]
GO
接下来,在'XMLValidateWithXSD'数据库中添加一个名为'tblXMLDataInformation'的表,并添加三个列:'Id'(整型),'XMLData'(XML类型)和'LoadedDateTime'(日期时间类型)。
USE [XMLValidateWithXSD]
GO
CREATE TABLE [dbo].[tblXMLDataInformation](
[Id] [int] IDENTITY(1,1) NOT NULL,
[XMLData] [xml] NULL,
[LoadedDateTime] [datetime] NULL,
PRIMARY KEY CLUSTERED ([Id] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
然后,向'tblXMLDataInformation'表中添加两条数据记录。
INSERT INTO [dbo].[tblXMLDataInformation] (XMLData, LoadedDateTime) VALUES (N'Rahul Suresh Chavhan ', GETDATE())
INSERT INTO [dbo].[tblXMLDataInformation] (XMLData, LoadedDateTime) VALUES (N'Madhuri Patil ', GETDATE())
在数据库中添加一个名为'XMLTranformFailedEntry'的表,用于维护XSD验证失败的XML数据记录。
USE [XMLValidateWithXSD]
GO
CREATE TABLE [dbo].[XMLTranformFailedEntry](
[Id] [int] NULL,
[Reason] [nvarchar](50) NULL
)
GO
现在,需要创建一个XSD模式来验证'tblXMLDataInformation'表中的'XMLData'列。执行以下查询来创建这个模式。
CREATE XML SCHEMA COLLECTION StudentSchema AS N' '
GO
DECLARE @ID AS int
DECLARE @XML AS XML
DECLARE @string NVARCHAR(MAX)
DECLARE c CURSOR FOR SELECT DISTINCT Id FROM tblXMLDataInformation
OPEN c
FETCH NEXT FROM c INTO @ID
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM c INTO @ID
SELECT @XML = XMLData FROM tblXMLDataInformation WHERE Id = @ID
BEGIN TRY
DECLARE @x XML(StudentSchema)
SET @x = @XML
END TRY
BEGIN CATCH
INSERT INTO XMLXMLTranformFailedEntry (Id, Reason) VALUES (@ID, 'XML validation failed with StudentSchema XSD file')
END CATCH
END
CLOSE c
DEALLOCATE c