2017-09-05 1 views
0

J'essaie d'aller chercher les colonnes de la clé primaire de la synonymie pour laquelle j'ai un accès qui fait référence à une autre table de base de données que celle à laquelle j'ai accès. J'ai essayé avec connection.getMetaData(); metaData.getPrimaryKeys(dbname,schemaName , synonymName); de jdbc mais il m'a donné le résultat d'emty. J'ai aussi essayé d'exécuter des requêtes SQL suivantes SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME LIKE 'synonymName' AND CONSTRAINT_NAME LIKE 'PK%';Serveur SQL: Comment lister les colonnes de contrainte de clé primaire de synonyme référençant une base de données de serveur SQL différente?

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

mais il n'a pas aidé non plus. Il y a donc un moyen d'extraire les contraintes de clé primaire du synonyme où la table référée se trouve dans une autre base de données à laquelle il n'y a pas d'excès direct.

Répondre

0

Essayez cette requête ci-dessous. Si votre table de base se trouve dans une base de données différente, vous devrez peut-être également préfixer le nom de la base de données. Ce sera bon pour commencer.

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'