Sql server 如何在SQLServer中通过存储过程生成特定格式的xml文件作为数据库的输出?
我想通过一个存储过程以如下所示的格式生成一个xml文件 我在获取外键标记的相同格式的值时遇到了一些问题,如下所示。那么,有谁能帮助我创建一个存储过程,以生成以下给定格式的结果呢Sql server 如何在SQLServer中通过存储过程生成特定格式的xml文件作为数据库的输出?,sql-server,xml,database,stored-procedures,Sql Server,Xml,Database,Stored Procedures,我想通过一个存储过程以如下所示的格式生成一个xml文件 我在获取外键标记的相同格式的值时遇到了一些问题,如下所示。那么,有谁能帮助我创建一个存储过程,以生成以下给定格式的结果呢 <?xml version="1.0" encoding="utf-8"?> <metadata> <database name="Northwind" default="True"> <schema name="dbo" default="True"&g
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<database name="Northwind" default="True">
<schema name="dbo" default="True">
<table name="Categories">
<field name="CategoryID" primary_key="True" type_name="int" type="Int32" size="4" precision="10" scale="255" nullable="False" readonly="True" />
<field name="CategoryName" type_name="nvarchar" type="String" size="15" precision="255" scale="255" nullable="False" />
<field name="Description" type_name="ntext" type="String" size="1073741823" precision="255" scale="255" />
<field name="Picture" type_name="image" type="Binary" size="2147483647" precision="255" scale="255" />
</table>
<table name="Customers">
<field name="CustomerID" primary_key="True" type_name="nchar" type="String" size="5" precision="255" scale="255" nullable="False" />
<field name="CompanyName" type_name="nvarchar" type="String" size="40" precision="255" scale="255" nullable="False" />
<field name="ContactName" type_name="nvarchar" type="String" size="30" precision="255" scale="255" />
<field name="ContactTitle" type_name="nvarchar" type="String" size="30" precision="255" scale="255" />
<field name="Address" type_name="nvarchar" type="String" size="60" precision="255" scale="255" />
<field name="City" type_name="nvarchar" type="String" size="15" precision="255" scale="255" />
<field name="Region" type_name="nvarchar" type="String" size="15" precision="255" scale="255" />
<field name="PostalCode" type_name="nvarchar" type="String" size="10" precision="255" scale="255" />
<field name="Country" type_name="nvarchar" type="String" size="15" precision="255" scale="255" />
<field name="Phone" type_name="nvarchar" type="String" size="24" precision="255" scale="255" />
<field name="Fax" type_name="nvarchar" type="String" size="24" precision="255" scale="255" />
</table>
<table name="Shippers">
<field name="ShipperID" primary_key="True" type_name="int" type="Int32" size="4" precision="10" scale="255" nullable="False" readonly="True" />
<field name="CompanyName" type_name="nvarchar" type="String" size="40" precision="255" scale="255" nullable="False" />
<field name="Phone" type_name="nvarchar" type="String" size="24" precision="255" scale="255" />
</table>
<table name="Suppliers">
<field name="SupplierID" primary_key="True" type_name="int" type="Int32" size="4" precision="10" scale="255" nullable="False" readonly="True" />
<field name="CompanyName" type_name="nvarchar" type="String" size="40" precision="255" scale="255" nullable="False" />
<field name="ContactName" type_name="nvarchar" type="String" size="30" precision="255" scale="255" />
<field name="ContactTitle" type_name="nvarchar" type="String" size="30" precision="255" scale="255" />
<field name="Address" type_name="nvarchar" type="String" size="60" precision="255" scale="255" />
<field name="City" type_name="nvarchar" type="String" size="15" precision="255" scale="255" />
<field name="Region" type_name="nvarchar" type="String" size="15" precision="255" scale="255" />
<field name="PostalCode" type_name="nvarchar" type="String" size="10" precision="255" scale="255" />
<field name="Country" type_name="nvarchar" type="String" size="15" precision="255" scale="255" />
<field name="Phone" type_name="nvarchar" type="String" size="24" precision="255" scale="255" />
<field name="Fax" type_name="nvarchar" type="String" size="24" precision="255" scale="255" />
<field name="HomePage" type_name="ntext" type="String" size="1073741823" precision="255" scale="255" />
</table>
<table name="Orders">
<field name="OrderID" primary_key="True" type_name="int" type="Int32" size="4" precision="10" scale="255" nullable="False" readonly="True" />
<field name="CustomerID" type_name="nchar" type="String" size="5" precision="255" scale="255" />
<field name="EmployeeID" type_name="int" type="Int32" size="4" precision="10" scale="255" />
<field name="OrderDate" type_name="datetime" type="DateTime" size="8" precision="23" scale="3" />
<field name="RequiredDate" type_name="datetime" type="DateTime" size="8" precision="23" scale="3" />
<field name="ShippedDate" type_name="datetime" type="DateTime" size="8" precision="23" scale="3" />
<field name="ShipVia" type_name="int" type="Int32" size="4" precision="10" scale="255" />
<field name="Freight" type_name="money" type="Decimal" size="8" precision="19" scale="255" />
<field name="ShipName" type_name="nvarchar" type="String" size="40" precision="255" scale="255" />
<field name="ShipAddress" type_name="nvarchar" type="String" size="60" precision="255" scale="255" />
<field name="ShipCity" type_name="nvarchar" type="String" size="15" precision="255" scale="255" />
<field name="ShipRegion" type_name="nvarchar" type="String" size="15" precision="255" scale="255" />
<field name="ShipPostalCode" type_name="nvarchar" type="String" size="10" precision="255" scale="255" />
<field name="ShipCountry" type_name="nvarchar" type="String" size="15" precision="255" scale="255" />
<foreignkey>
<referenced_object>
<name>Customers</name>
<name>dbo</name>
<name>Northwind</name>
</referenced_object>
<referencing_field name="CustomerID" referenced_field="CustomerID" />
<referencing_cardinality>Many</referencing_cardinality>
<referenced_cardinality>One</referenced_cardinality>
</foreignkey>
<foreignkey>
<referenced_object>
<name>Shippers</name>
<name>dbo</name>
<name>Northwind</name>
</referenced_object>
<referencing_field name="ShipVia" referenced_field="ShipperID" />
<referencing_cardinality>Many</referencing_cardinality>
<referenced_cardinality>One</referenced_cardinality>
</foreignkey>
<foreignkey>
<referenced_object>
<name>Employees</name>
<name>dbo</name>
<name>Northwind</name>
</referenced_object>
<referencing_field name="EmployeeID" referenced_field="EmployeeID" />
<referencing_cardinality>Many</referencing_cardinality>
<referenced_cardinality>One</referenced_cardinality>
</foreignkey>
</table>
<table name="Products">
<field name="ProductID" primary_key="True" type_name="int" type="Int32" size="4" precision="10" scale="255" nullable="False" readonly="True" />
<field name="ProductName" type_name="nvarchar" type="String" size="40" precision="255" scale="255" nullable="False" />
<field name="SupplierID" type_name="int" type="Int32" size="4" precision="10" scale="255" />
<field name="CategoryID" type_name="int" type="Int32" size="4" precision="10" scale="255" />
<field name="QuantityPerUnit" type_name="nvarchar" type="String" size="20" precision="255" scale="255" />
<field name="UnitPrice" type_name="money" type="Decimal" size="8" precision="19" scale="255" />
<field name="UnitsInStock" type_name="smallint" type="Int16" size="2" precision="5" scale="255" />
<field name="UnitsOnOrder" type_name="smallint" type="Int16" size="2" precision="5" scale="255" />
<field name="ReorderLevel" type_name="smallint" type="Int16" size="2" precision="5" scale="255" />
<field name="Discontinued" type_name="bit" type="Boolean" size="1" precision="255" scale="255" nullable="False" />
<foreignkey>
<referenced_object>
<name>Categories</name>
<name>dbo</name>
<name>Northwind</name>
</referenced_object>
<referencing_field name="CategoryID" referenced_field="CategoryID" />
<referencing_cardinality>Many</referencing_cardinality>
<referenced_cardinality>One</referenced_cardinality>
</foreignkey>
<foreignkey>
<referenced_object>
<name>Suppliers</name>
<name>dbo</name>
<name>Northwind</name>
</referenced_object>
<referencing_field name="SupplierID" referenced_field="SupplierID" />
<referencing_cardinality>Many</referencing_cardinality>
<referenced_cardinality>One</referenced_cardinality>
</foreignkey>
</table>
</schema>
</database>
</metadata>
Declare @temp Table(result xml)
DECLARE @value varchar(50)
insert into @temp values((
Select DB_NAME() AS '@name',
(SELECT sc.SCHEMA_NAME as '@name' ,
(SELECT TABLE_NAME as '@name',
(
SELECT COLUMN_NAME as '@name',
t.name as '@type_name',
case DATA_TYPE
when 'nvarchar'
then 'String'
when 'varchar'
then 'String'
when 'int'
then 'Int32'
when 'bigint'
then 'Int64'
when 'bit'
then 'Boolean'
when 'datetime'
then 'DateTime'
else null
end as '@type',
NUMERIC_PRECISION as '@precision',
NUMERIC_SCALE as '@scale',
case data_type
when 'nvarchar'
then CHARACTER_MAXIMUM_LENGTH
when 'varchar'
then CHARACTER_MAXIMUM_LENGTH
else null
end as '@size',
INFORMATION_SCHEMA.COLUMNS.IS_NULLABLE AS '@nullable',
'true' as '@readonly',
'true'as '@primary_key'
FROM INFORMATION_SCHEMA.COLUMNS
INNER JOIN
sys.types t ON TYPE_ID(INFORMATION_SCHEMA.COLUMNS.DATA_TYPE) = t.user_type_id
LEFT OUTER JOIN
sys.index_columns ic ON t.name=INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME
--ON ic.column_id = INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME
LEFT OUTER JOIN
sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
where INFORMATION_SCHEMA.COLUMNS.TABLE_NAME =
INFORMATION_SCHEMA.TABLES.TABLE_NAME
order by INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION
For XML PATH ('field'), type
)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA='my schema'
ORDER BY TABLE_NAME ASC
For XML PATH ('table'),type)
from INFORMATION_SCHEMA.SCHEMATA sc where sc.SCHEMA_NAME IN(Select distinct TOP 1 ta.TABLE_SCHEMA from
INFORMATION_SCHEMA.TABLES ta )
For XML PATH('schema'),type)
For XML PATH('database'),Root('metadata')))
select * from @temp
我们在集成这两个存储过程时面临一个问题
那么,是否有任何方法可以动态生成相同格式的xml文件我们很乐意帮助您找到可能面临的问题,但这需要您首先付出自己的努力,向我们展示您的代码,并解释您遇到的困难和需要帮助的地方。因此,这不仅仅是一个代码编写服务……是的,我已经尝试了我自己的,我在获取外键标记中的xml时遇到了麻烦。我甚至添加了我尝试过的存储过程。
(select INFORMATION_SCHEMA.TABLE_CONSTRAINTS.TABLE_NAME as 'name',
INFORMATION_SCHEMA.TABLE_CONSTRAINTS.TABLE_SCHEMA as 'name',
INFORMATION_SCHEMA.TABLE_CONSTRAINTS.TABLE_CATALOG as 'name' ,
referencing_field_name =FK_COLS.COLUMN_NAME,
referenced_field = PK_COLS.COLUMN_NAME,
referencing_cardinality='Many',
referenced_cardinality='one'
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS REF_CONST
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS
ON REF_CONST.CONSTRAINT_CATALOG = INFORMATION_SCHEMA.TABLE_CONSTRAINTS.CONSTRAINT_CATALOG
AND REF_CONST.CONSTRAINT_SCHEMA = INFORMATION_SCHEMA.TABLE_CONSTRAINTS.CONSTRAINT_SCHEMA
AND REF_CONST.CONSTRAINT_NAME = INFORMATION_SCHEMA.TABLE_CONSTRAINTS.CONSTRAINT_NAME
AND INFORMATION_SCHEMA.TABLE_CONSTRAINTS.CONSTRAINT_TYPE = 'FOREIGN KEY'
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK
ON REF_CONST.UNIQUE_CONSTRAINT_CATALOG = PK.CONSTRAINT_CATALOG
AND REF_CONST.UNIQUE_CONSTRAINT_SCHEMA = PK.CONSTRAINT_SCHEMA
AND REF_CONST.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
AND PK.CONSTRAINT_TYPE = 'PRIMARY KEY'
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE FK_COLS ON REF_CONST.CONSTRAINT_NAME = FK_COLS.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE PK_COLS ON PK.CONSTRAINT_NAME = PK_COLS.CONSTRAINT_NAME
FOR XML RAW ('referenced_object'), ELEMENTS, ROOT ('foreign key'))