2009-10-19 10 views
0

Je cherche un moyen de rejoindre une série de tables SQL basées sur une liste de noms de tables. La liste des noms de tables peut changer à mesure que le système se développe, mais je dois m'assurer que la jointure fonctionne sur toutes les tables à mesure qu'elles grandissent.SQL Rejoindre des tables en fonction d'une liste de noms

Chaque table de la liste aura une colonne commune appelée ActivityID qui est une clé étrangère de retour à la table d'activité qui est la table source de la jointure.

Je pensais peut-être créer un varchar et construire la requête avant de l'exécuter. Est-ce le meilleur moyen ou la syntaxe de jointure peut-elle être créée sans la construction de varchar?

+0

Vouliez-vous utiliser la balise "sql-server" au lieu de "sql" et "server"? – Andomar

Répondre

1

Je placerais la requête dans une vue. Lorsque vous ajoutez une nouvelle table, modifiez l'affichage pour inclure la nouvelle table. Ce serait beaucoup plus efficace que SQL dynamique.

Si vous ne contrôlez pas qui/quand ajoute une table, quelque chose comme le SQL dynamique suivante fonctionnerait dans Sql Server:

declare @query nvarchar(max) 
set @query = 'select * from t1 ' 

select 
    @query = @query + 'left join ' + name + 
     ' on t1.ActivityID = ' + name + '.ActivityID ' 
from sys.tables 
where name like '%Activity%' 

exec (@query) 

Là encore, je me demande comment le programme appelant sait quels champs d'attendre .

+0

On dirait que vous pensez au même SQL dynamiquement combiné que je pensais initialement. Je vais aller de l'avant en utilisant cette route. –

1

SQL standard ne peut pas faire cela. C'est généralement un mauvais design de toute façon. Certains fournisseurs ont des extensions qui permettent cela comme Oracle a EXECUTE IMMEDIATE dans les blocs PL/SQL anonymes.

Vous devez soit créer l'instruction en externe, soit utiliser une procédure stockée pour créer une instruction et l'exécuter.

+0

Je n'ai aucun contrôle sur la conception de la base de données. La base de données en question est la base de données Microsoft CRM sous-jacente qui semble assez générique dans tous les aspects. Je ne peux pas identifier les tables qui fournissent les informations sur l'instance de relation et en tant que tel, je dois revenir à trouver les tables qui devraient être jointes d'une manière alternative. Peut-être que quelqu'un d'autre sait comment je peux interroger une relation existante dans CRM à partir de la base de données? –

Questions connexes