[英]How do i determine the related column between tables?
我有兩張桌子。 我需要找到與它們相關的列。 沒有任何外鍵。 “ CUSTTABLE”的主鍵是“ ACCOUNTNUM”,而“ DIRPARTYTABLE”的主鍵是“ RECID”。 相關列為“ CUSTTABLE.PARTY”和“ DIRPARTYTABLE.RECID”。 我需要它在同一行上返回“ CUSTTABLE.ACCOUNTNUM”,“ DIRPARTYTABLE.NAME”,“ DIRPARTYTABLE.PARTYNUMBER”。 我擁有的代碼返回匹配的列名。 但是,在我的情況下,名稱通常永遠都不相同。
是否有類似的方法返回具有匹配值而不是名稱的列? 即使返回多列也會有所幫助。 實際上,這些表有100多個列,而我有很多表來確定相同類型的關系。
客戶:
ACCOUNTNUM CUSTGROUP PARTY
305342 LTL 5637459693
305343 LTL 5637468513
305345 LTL 5637472531
305398 LTL 5637468514
305405 LTL 5637468515
透明表:
NAME PARTYNUMBER RECID
ZEP MFG 1500121 5637459693
TABER EXTRUSIONS 1500122 5637459694
LAWSON PRODUCTS 1500123 5637459695
KIMRAY 1500124 5637459696
ANCHOR PAINT MFG 1500125 5637459697
結果:
ACCOUNTNUM NAME PARTYNUMBER
305342 ZEP MFG 1500121
查詢:
select A.COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS A
join INFORMATION_SCHEMA.COLUMNS B
on A.COLUMN_NAME = B.COLUMN_NAME
where A.TABLE_NAME = 'CUSTTABLE'
and B.TABLE_NAME = 'DIRPARTYTABLE'
似乎您正在使用D365數據庫,在這種情況下,通常DIRPARTY
表包含所有信息,例如Employee,Customer,Vendor等。這些將由DIRPARTY.INSTANCERELATIONTYPE
過濾。 對於客戶CUSTTABLE.PARTY
= DIRPARTYTABLE.RECID
而INSTANCERELATIONTYPE
= 1155或5767,這是標准信息,您可能需要驗證INSTANCERELATIONTYPE是否與您的設置匹配。
關於關系識別,我建議您仔細檢查form properties - query
自行從D365應用程序form properties - query
,否則除非您有可用的元數據文檔 ,否則不驗證實際數據就很難預測關系,因為有時我們無法在一個列上進行中繼對於關鍵關系。 即VENDOR.ACCOUNTID
不是關鍵列,除非您考慮VENDOR.ENTITYID
或VENDOR.DATAAREAID
。
但是,以下查詢作為起點可能會有所幫助。 除了沒有任何記錄的表,您可以在各種表中找到相似的名稱列。
with CTE as
(
SELECT DB_ID () DatabaseID,
t.Name AS TableName,
p.rows AS RowCounts,
SUM(a.total_pages) * 8 AS TblTotalSizeKB,
SUM(a.used_pages) * 8 AS UsedSpaceKB
-- CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB,
FROM
sys.tables as t
INNER JOIN
sys.indexes i ON t.Object_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
--LEFT OUTER JOIN
-- sys.schemas s ON t.schema_id = s.schema_id
WHERE t.OBJECT_ID > 255 and p.rows > 0 --and T.name like '%WORKFLOWTRACKINGSTATUSTABLE%' -----------Enter TABLE name (search key word) here
GROUP BY T.name, p.Rows
)
select C.COLUMN_NAME,DATA_TYPE, CTE.*
from CTE
JOIN INFORMATION_SCHEMA.COLUMNS AS C on CTE.TableName = C.TABLE_NAME
WHERE COLUMN_NAME LIKE '%Hire%' -----------Enter COLUMN name (search key word) here
ORDER BY TABLE_NAME
GO
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.