2017-09-05 69 views
0

我試圖獲取我已經訪問的同義詞的主鍵列,這是指一個不同的數據庫表,然後是我所訪問的。我試着用jdbc的 connection.getMetaData(); metaData.getPrimaryKeys(dbname,schemaName , synonymName);,但它給了我emty結果。我也試過執行下列SQL查詢 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME LIKE 'synonymName' AND CONSTRAINT_NAME LIKE 'PK%';SQL Server:如何列出引用不同SQL Server數據庫的同義詞的主鍵約束列?

SELECT * FROM sys.objects WHERE type = 'PK' AND parent_object_id = OBJECT_ID (synonymName);

,但它並沒有幫助。那麼有沒有什麼辦法可以提取同義詞的主鍵約束,其中表引用的是另一個沒有直接過量的數據庫。

回答

0

請嘗試以下查詢。如果您的基表位於不同的數據庫中,那麼您可能還需要爲數據庫名稱加上前綴。這將是很好的開始。

select c.*, ob.name 
from 
    sys.columns c 
    inner join sys.synonyms s on c.object_id = object_id(s.base_object_name) 
    INNER JOIN sys.objects ob ON c.object_id = ob.object_id 
    INNER JOIN sys.indexes i ON i.object_id = c.Object_id 
    INNER JOIN sys.index_columns ic ON i.OBJECT_ID = ic.OBJECT_ID 
    AND i.object_id = ic.object_id AND 
    i.index_id = ic.index_id and i.is_primary_key = 1 
    AND ic.column_id = c.column_id 
where 
    s.name = 'synonymName'