... Cela reste à affiner et comprendre...
USE distribution;
SELECT DISTINCT @@SERVERNAME, P.Publication, A.Article
FROM dbo.MSdistribution_status AS s
INNER JOIN dbo.MSdistribution_agents AS Agents ON Agents.[id] = S.agent_id
INNER JOIN dbo.MSpublications AS P ON P.publication = Agents.publication
INNER JOIN dbo.MSarticles AS A ON A.article_id = S.article_id and P.publication_id = A.publication_id
WHERE Agents.subscriber_db NOT LIKE 'virtual'
--AND s.UndelivCmdsInDistDB <> 0
--ORDER BY UndelivCmdsInDistDB DESC
A+
Mise à jour
J'ai trouvé plus simple et plus clair : Mon objectif étant de savoir si la base associée à ma chaîne de connexion est répliquée (= publisher d'un réplication) ou pas ?
Pour être une base publisher d'une réplication l'instance de SQL SERVER doit avoir une base "Distribution".
Dans cette base la table système : MSPublications liste les publications et les bases qui les concernent.
En Transac SQL cela donne un truc du style :
DECLARE @replique BIT = 0;
IF EXISTS (SELECT * FROM sys.databases WHERE name = 'distribution')
BEGIN
IF EXISTS (SELECT * FROM distribution.dbo.MSPublications WHERE publisher_db = DB_NAME())
BEGIN
SET @replique = 1;
END
END
SELECT @replique;
Y a plus qu'a en faire une fonction pour pouvoir l'utiliser simplement...
Mise à jour N°2
Savoir si une table est publiée dans une réplication
DECLARE @table varchar(255) = 'article' --- nom de la table a chercher
DECLARE @replique BIT = 0;
IF (EXISTS (SELECT 1 FROM sys.databases WHERE name = 'distribution'))
BEGIN
IF (EXISTS (SELECT 1 FROM distribution.dbo.MSPublications WHERE publisher_db = DB_NAME()))
BEGIN
IF (EXISTS (SELECT 1 FROM distribution.dbo.MSarticles WHERE article = @table))
BEGIN
SET @replique = 1;
END
END
END
SELECT @replique;
Enjoy
Mise à jour
J'ai trouvé plus simple et plus clair : Mon objectif étant de savoir si la base associée à ma chaîne de connexion est répliquée (= publisher d'un réplication) ou pas ?
Pour être une base publisher d'une réplication l'instance de SQL SERVER doit avoir une base "Distribution".
Dans cette base la table système : MSPublications liste les publications et les bases qui les concernent.
En Transac SQL cela donne un truc du style :
DECLARE @replique BIT = 0;
IF EXISTS (SELECT * FROM sys.databases WHERE name = 'distribution')
BEGIN
IF EXISTS (SELECT * FROM distribution.dbo.MSPublications WHERE publisher_db = DB_NAME())
BEGIN
SET @replique = 1;
END
END
SELECT @replique;
Y a plus qu'a en faire une fonction pour pouvoir l'utiliser simplement...
Mise à jour N°2
Savoir si une table est publiée dans une réplication
DECLARE @table varchar(255) = 'article' --- nom de la table a chercher
DECLARE @replique BIT = 0;
IF (EXISTS (SELECT 1 FROM sys.databases WHERE name = 'distribution'))
BEGIN
IF (EXISTS (SELECT 1 FROM distribution.dbo.MSPublications WHERE publisher_db = DB_NAME()))
BEGIN
IF (EXISTS (SELECT 1 FROM distribution.dbo.MSarticles WHERE article = @table))
BEGIN
SET @replique = 1;
END
END
END
SELECT @replique;
Enjoy
Aucun commentaire:
Enregistrer un commentaire