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
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 ***********************
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 ***********************
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 ***********************