【发布时间】:2021-11-16 20:02:34
【问题描述】:
我有一个没有限制、没有 PK 或 FK 的数据库。
我正在尝试进行逆向工程以找出表之间的连接。为此,我的方法是创建具有相同名称和数据类型的所有列的列表。所以我创建了这个查询:
SELECT schema_name(tab.schema_id) AS schema_name
,tab.name AS table_name
,col.name AS column_name
,t.name AS data_type
,SUM([Partitions].[rows]) AS [TotalRowCount]
FROM sys.tables AS tab
INNER JOIN sys.columns AS col ON tab.object_id = col.object_id
LEFT JOIN sys.types AS t ON col.user_type_id = t.user_type_id
JOIN sys.partitions AS [Partitions] ON tab.[object_id] = [Partitions].[object_id]
AND [Partitions].index_id IN (
0
,1
)
GROUP BY schema_name(tab.schema_id)
,tab.name
,col.name
,t.name
ORDER BY col.name
结果我有这个:
| schema_name | table_name | column_name | data_type | TotalRowCount |
|---|---|---|---|---|
| H513WEB | ALPRETAR | IDREVI | numeric | 1439 |
| H513WEB | ALPRETAR | IDREVN | numeric | 1439 |
| H513WEB | CPDOENP | IDRLPP | numeric | 4156 |
| H513WEB | ALPRETAR | IDRNG | numeric | 1439 |
| H513WEB | FAAFACP | IDROLDEBCOM | numeric | 100541 |
| H513WEB | FAAFACP_OLD | IDROLDEBCOM | numeric | 1513 |
| H513WEB | CACPTAP | IDROLE | numeric | 22109 |
| H513WEB | CARROLP | IDROLE | numeric | 5 |
| H513WEB | FAENTFP | IDROLE | numeric | 26084 |
| H513WEB | CACPTCP | IDRUBRIQUE | numeric | 48 |
| H513WEB | CACPTRP | IDRUBRIQUE | numeric | 12942 |
| H513WEB | CAIMDCP | IDRUBRIQUE | numeric | 6637 |
| H513WEB | CAIMGIP | IDRUBRIQUE | numeric | 5 |
| H513WEB | CAIMRSP | IDRUBRIQUE | numeric | 40 |
| H513WEB | CAOREXP | IDRUBRIQUE | numeric | 5 |
| H513WEB | CAPLARP | IDRUBRIQUE | numeric | 3 |
| H513WEB | CARERUP | IDRUBRIQUE | numeric | 175 |
| H513WEB | CARUBRP | IDRUBRIQUE | numeric | 312 |
但我只想列出具有相同 column_name 和 data_type 的行,结果应如下所示:
| schema_name | table_name | column_name | data_type | TotalRowCount |
|---|---|---|---|---|
| H513WEB | FAAFACP | IDROLDEBCOM | numeric | 100541 |
| H513WEB | FAAFACP_OLD | IDROLDEBCOM | numeric | 1513 |
| H513WEB | CACPTAP | IDROLE | numeric | 22109 |
| H513WEB | CARROLP | IDROLE | numeric | 5 |
| H513WEB | FAENTFP | IDROLE | numeric | 26084 |
| H513WEB | CACPTCP | IDRUBRIQUE | numeric | 48 |
| H513WEB | CACPTRP | IDRUBRIQUE | numeric | 12942 |
| H513WEB | CAIMDCP | IDRUBRIQUE | numeric | 6637 |
| H513WEB | CAIMGIP | IDRUBRIQUE | numeric | 5 |
| H513WEB | CAIMRSP | IDRUBRIQUE | numeric | 40 |
| H513WEB | CAOREXP | IDRUBRIQUE | numeric | 5 |
| H513WEB | CAPLARP | IDRUBRIQUE | numeric | 3 |
| H513WEB | CARERUP | IDRUBRIQUE | numeric | 175 |
| H513WEB | CARUBRP | IDRUBRIQUE | numeric | 312 |
怎么做?
【问题讨论】:
-
嗨@Larnu,我写了一篇关于您的查询以及它如何帮助我找到解决方案的帖子:jeeja.biz/2021/11/10/…。你认为我可以将我的问题重命名为“将 SQL Server 数据库反向工程为 ERD”吗?因为它现在的标题有点误导。谢谢
-
您可以随时edit您自己的问题,除非它被锁定。只是让陛下不要做诸如使现有答案无效之类的事情。
标签: sql-server tsql constraints reverse-engineering unique-constraint