Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在SQLServer中通过存储过程生成特定格式的xml文件作为数据库的输出?_Sql Server_Xml_Database_Stored Procedures - Fatal编程技术网

Sql server 如何在SQLServer中通过存储过程生成特定格式的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文件

我在获取外键标记的相同格式的值时遇到了一些问题,如下所示。那么,有谁能帮助我创建一个存储过程,以生成以下给定格式的结果呢

<?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'))