簡體   English   中英

如何確定表格之間的相關列?

[英]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.RECIDINSTANCERELATIONTYPE = 1155或5767,這是標准信息,您可能需要驗證INSTANCERELATIONTYPE是否與您的設置匹配。

關於關系識別,我建議您仔細檢查form properties - query自行從D365應用程序form properties - query ,否則除非您有可用的元數據文檔 ,否則不驗證實際數據就很難預測關系,因為有時我們無法在一個列上進行中繼對於關鍵關系。 VENDOR.ACCOUNTID不是關鍵列,除非您考慮VENDOR.ENTITYIDVENDOR.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM