2010-02-10 13 views
1

Comment puis-je m'échapper du codage en dur du nom de la base de données lors du référencement d'une table dans une procédure stockée. Par exemple, il existe deux bases de données db1 et db2. J'écris une procédure stockée dans db2 qui référence deux tables, une de db1 et une autre de db2. Les deux sont sur le même serveur sybase.Nom de la base de données lors du référencement des tables - Sybase

Répondre

4

Si je comprends bien votre question, d'une part, dans votre procédure stockée, vous pouvez vous référer à la table dans la même base de données directement par son nom

SELECT ... 
FROM table_in_db2 

Vous pouvez vous référer à une table dans la base de données db1 par préfixer le nom de base de données et un propriétaire vide:

SELECT ... 
FROM db1..table_in_db1 

d'autre part, si vous voulez éviter noms de base de données codage en dur dans la procédure que vous pouvez créer une vue dans la base de données db2 qui fait référence à la table db1:

CREATE VIEW view_in_db2 
AS 
    SELECT * 
    FROM db1..table_in_db1 

et l'utiliser dans la procédure:

SELECT ... 
FROM view_in_db2 
0

Vous devez garder le code portable, 2 bases de données impliquent, mais il faut éviter les bases de données référençant par son nom. Ensuite, vous pouvez créer des tables proxy (ou des vues proxy, si ces vues existent en 12.5). Reportez-vous aux tables de proxy pour les objets locaux.

Cela fonctionnera, mais nécessitera un soin particulier, chaque fois que vous déplacez/modifiez des bases de données. Mais de toute façon, la séparation des préoccupations que vous recherchez peut être réalisée.