2017-09-05 70 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'