OVH Cloud OVH Cloud

Utiliser une table d'une base dans d'autres base

3 réponses
Avatar
Sylo
Bonjour,

j'ai plusieurs base sur mon serveur sqlserver et il y a la base des
utilisateurs contenant une table utilisateur que j'aimerais pouvoir utiliser
dans toutes mes bases.
Est-il possible de créer des relations entre des tables de différentes base ?
Est-il possible d'interroger dans une même interrogation plusieurs table de
base différentes ?

Je sais que mes questions sont un peu incongrue mais pouvoir faire cela me
simplifierait la vie.
Merci
Sylo

3 réponses

Avatar
Gilles
> Est-il possible de créer des relations entre des tables de différentes
base ?


A mon avis tu doit gérer l'intégrité à la mano :-)

Est-il possible d'interroger dans une même interrogation plusieurs table
de
base différentes ?


bien sûr , en rajoutant le nom de la base et l'utilisateur devant

mabase.dbo.matable tu peut aussi ne pas siter l'utilisateur
mabase..matable

Gilles
Avatar
Gilles
Citer et non siter désolé :-)
Gilles
Avatar
Fred BROUARD
Sylo a écrit:
Bonjour,

j'ai plusieurs base sur mon serveur sqlserver et il y a la base des
utilisateurs contenant une table utilisateur que j'aimerais pouvoir utiliser
dans toutes mes bases.
Est-il possible de créer des relations entre des tables de différentes base ?



Une relation n'est autre qu'une jointure entre deux table. C'est possible entre
différentes bases et différents serveurs même hétérogènes (ex Oracle / SQL Server).
Si tu veut parler d'intégrité référentielle, donc de contrainte FOREIGN KEY,
non, cela n'est pas pris en charge :

***** DÉMO ******

CREATE DATABASE _test
GO
CREATE DATABASE _test2
GO
Use _test
GO
CREATE TABLE TEST_in (COL1 INT NOT NULL PRIMARY KEY)
GO
Use _test2
GO
CREATE TABLE TEST_out (COL1 INT NOT NULL PRIMARY KEY,
COL2 INT FOREIGN KEY
REFERENCES _test..TEST_in (COL1))
GO

/*
Serveur : Msg 1763, Niveau 16, État 1, Ligne 1
Les références de clés étrangères aux bases de données croisées ne sont pas
prises en charge. Clé étrangère '_test..TEST_in'.
Serveur : Msg 1750, Niveau 16, État 1, Ligne 1
Impossible de créer la contrainte. Voir les erreurs précédentes.
*/

****************

En revanche tu peut faire cela par trigger. Mais pose toi la question de
l'évolution des bases et des serveurs :
si la base distante est mise sur un autre serveur et que ce dernier à besoin
d'être arrêté pour des raisons de maintenance, alors ta base primale sera
bloquée car en attente de validation des effets du curseur.
Mieux vaut donc privilégié une procédure stockée qui gérera le cas d'absence de
la base distante, ou la réplication (asynchrone).


Est-il possible d'interroger dans une même interrogation plusieurs table de
base différentes ?



Evidemment. La syntaxe est :
Serveur.Base.Schema.Objet.

Exemple :
SELECT *
FROM SRV1.BD_PAYE.dbo.T_EMPLOYEE

avec certaines élisions possible...


A +


Je sais que mes questions sont un peu incongrue mais pouvoir faire cela me
simplifierait la vie.
Merci
Sylo



--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************