2016-06-18 82 views
0

我有這樣如何通過查詢識別SQL Server中的1-1,1-M和M-N關係?

SELECT 
    RC.CONSTRAINT_NAME FKName, 
    KF.TABLE_SCHEMA FKSchema, 
    KF.TABLE_NAME FKTable, 
    KF.COLUMN_NAME FKColumn, 
    RC.UNIQUE_CONSTRAINT_NAME PKName, 
    KP.TABLE_SCHEMA PKSchema, 
    KP.TABLE_NAME PKTable, 
    KP.COLUMN_NAME PKColumn, 
    RC.MATCH_OPTION MatchOption, 
    RC.UPDATE_RULE UpdateRule, 
    RC.DELETE_RULE DeleteRule 
FROM 
    [INFORMATION_SCHEMA].[REFERENTIAL_CONSTRAINTS] RC 
JOIN 
    [INFORMATION_SCHEMA].[KEY_COLUMN_USAGE] KF ON RC.CONSTRAINT_NAME = KF.CONSTRAINT_NAME 
JOIN 
    [INFORMATION_SCHEMA].[KEY_COLUMN_USAGE] KP ON RC.UNIQUE_CONSTRAINT_NAME = KP.CONSTRAINT_NAME 

查詢,它有這樣一個結果:

FK_Person_Address dbo Person Id PK_Address dbo Address Id SIMPLE NO ACTION NO ACTION --[1-1] or [1-M] or [M-N] I need this! 

我想認識什麼是關係的每一行1-1或1-M作爲類型有關係狀態的列。

[1-1]或[1-M]或[M-N]我需要這個!

任何人都可以引導我嗎?

編輯:

我爲什麼問這個問題?所以我看到一些像Reverse poco GeneratorEntity Framework Power Tools Beta 4這樣的視覺工作室擴展可以將表格反轉到C#pocos,因此它們必須知道關係狀態1-1或1-M或MN,以便將導航屬性生成爲單個類或類的列表,並且還爲映射創建EntityTypeConfiguration他們如何從SQL服務器表中獲取這些信息?如果我們不知道任何有關表的關係,那麼我們不能將它們轉換爲C#類!

+0

您*無法從單個查詢中確定關係的基數 - 您需要查看**表格結構**以及表格如何鏈接以及如何定義所涉及的列。 –

+0

是的,這些工具通過查看錶結構知道關係**的基數!** –

+0

您是否有任何示例我無法識別您的描述?我如何看待表格結構?用哪種技術或查詢? – Hamed

回答

-1

對於1-1關係:在引用表中有外鍵約束唯一的關鍵字。

對於M-1關係:在引用表中沒有外鍵約束的唯一關鍵字。

+0

你能用你的提示編輯我目前的查詢嗎? – Hamed

+4

你的答案不是SQL;它不一定要全部大寫。請遵守英語拼寫,語法,標點和大寫的標準規則。 –