如何使用sql在xml中定义PK?

如何使用sql在xml中定义PK?,sql,sql-server,xml,sql-server-2008-r2,Sql,Sql Server,Xml,Sql Server 2008 R2,是否可以使用sql在xml中创建主键和外键标记? 像 需要记住的一件重要事情是,主键和外键是在表级别定义的,而不是针对单个列定义的,这可能导致非常复杂的查询来构建所需的数据。例如,很可能有一个主键覆盖多个字段;在大量表(而不是它所属的表)上,将列定义为外键也是很常见的 考虑到这一点,并且由于时间限制,以下内容只处理主键,我只在单列主键上进行了测试: SELECT c.COLUMN_NAME as '@Name', c.TABLE_NAME as '@Table',

是否可以使用sql在xml中创建主键和外键标记? 像


需要记住的一件重要事情是,主键和外键是在表级别定义的,而不是针对单个列定义的,这可能导致非常复杂的查询来构建所需的数据。例如,很可能有一个主键覆盖多个字段;在大量表(而不是它所属的表)上,将列定义为外键也是很常见的

考虑到这一点,并且由于时间限制,以下内容只处理主键,我只在单列主键上进行了测试:

  SELECT c.COLUMN_NAME as '@Name',
        c.TABLE_NAME as '@Table',
        Data_type as '@DataType',
        character_octet_length as '@Length', case when tc.CONSTRAINT_NAME IS NULL then 'false' else 'true' end as '@IsPrimaryKey'
    FROM information_schema.COLUMNS c
        left outer join INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu on c.TABLE_NAME = kcu.TABLE_NAME and kcu.COLUMN_NAME = c.COLUMN_NAME
        left outer join  INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc on tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME and tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
    FOR XML PATH ('Column'), TYPE
为了清楚起见,我在输出中包含了表名。样本输出:

<Column Name="AdministratorID" Table="Administrator" DataType="int"
    IsPrimaryKey="true" /><Column Name="UserName" Table="Administrator"
    DataType="varchar" Length="50" IsPrimaryKey="false" /><Column Name=
    ...

我意识到这并不完全符合您的要求,但它应该给您提供一些基础。

但它显示了数据库的所有列,而不是表的特定列。不过,您的原始查询似乎也没有被限制在单个表中。我解决了这个问题。您能告诉我如何创建FK部件吗?您所追求的XML格式应该可以使用嵌套查询,并将这些查询与XML路径“ForeignKey”一起输入。不幸的是,我无法编写一个能够返回您所需的所有信息的查询,尽管这些信息都存储在这些表中,但您可能无法在单个查询中管理这些信息。
  SELECT c.COLUMN_NAME as '@Name',
        c.TABLE_NAME as '@Table',
        Data_type as '@DataType',
        character_octet_length as '@Length', case when tc.CONSTRAINT_NAME IS NULL then 'false' else 'true' end as '@IsPrimaryKey'
    FROM information_schema.COLUMNS c
        left outer join INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu on c.TABLE_NAME = kcu.TABLE_NAME and kcu.COLUMN_NAME = c.COLUMN_NAME
        left outer join  INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc on tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME and tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
    FOR XML PATH ('Column'), TYPE
<Column Name="AdministratorID" Table="Administrator" DataType="int"
    IsPrimaryKey="true" /><Column Name="UserName" Table="Administrator"
    DataType="varchar" Length="50" IsPrimaryKey="false" /><Column Name=
    ...