是否可以使用sql在xml中创建主键和外键标记? 像
<Column Name="ID" DataType="INTEGER" IsPrimaryKey="true" />
<ForeignKey SourceTable="Product" TargetTable="Market">
<ColumnMap Source="ID" Target="ID" Ordinal="1" />
</ForeignKey>
我使用以下部分,但它没有显示PK和FK部分:
select COLUMN_NAME as '@Name',
Data_type as '@DataType',
character_octet_length as '@Length'
FROM information_schema.COLUMNS
FOR XML PATH ('Column'), TYPE
答案 0 :(得分:0)
要记住的一件重要事情是,主键和外键是在表级定义的,而不是针对单个列定义的,这可能会导致相当复杂的查询以构建所需的数据。例如,很可能有一个覆盖多个领域的主键;将列定义为除了它所属的表之外的大量表上的外键也很常见。
考虑到这一点 - 并且由于时间限制 - 以下仅处理主键,并且我仅在单列主键上测试它:
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=
...
我意识到这并不完全符合您的要求,但它应该为您提供一些可以构建的东西。