[SQL Server] Trouver la liste des serveurs SQL Server connectés au réseau
--1-- Solution N°1
CREATE TABLE #Liste_Serveurs(Nom_Serveur VARCHAR(255))
INSERT #Liste_Serveurs(Nom_Serveur)
EXEC master..xp_CMDShell'OSQL -L'
DELETE
FROM #Liste_Serveurs
WHERE Nom_Serveur='Servers:'
OR Nom_Serveur IS NULL
SELECT LTRIM(Nom_Serveur)
FROM #Liste_Serveurs
DROP TABLE #Liste_Serveurs
--1-- Solution N°1
SET NOCOUNT ON
CREATE TABLE #Liste_Serveurs(Nom_Serveur VARCHAR(255),
Server_Version nvarchar(255))
INSERT #Liste_Serveurs(Nom_Serveur)
EXEC master..xp_CMDShell'sqlcmd -Lc'
DELETE FROM #Liste_Serveurs
WHERE Nom_Serveur = 'Servers:'
OR Nom_Serveur IS NULL
OR Nom_Serveur = ''
DECLARE @tempdata TABLE (scratch sql_variant)
DECLARE @version nvarchar(255),
@cmd nvarchar(1000),
@serveur varchar(255)
DECLARE Liste_Serveurs CURSOR FAST_FORWARD
FOR SELECT Nom_Serveur FROM #Liste_Serveurs
OPEN Liste_Serveurs
FETCH NEXT FROM Liste_Serveurs INTO @serveur
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Processing: ' + @serveur
IF @serveur IN('servera','serverb')
BEGIN
UPDATE #Liste_Serveurs SET Server_Version = CASE @serveur
WHEN 'OLDDATA' THEN 'FailOver for Flowserver'
ELSE 'UNABLE TO CONNECT TO SERVER'
END
WHERE Nom_Serveur = @serveur
END
ELSE
BEGIN
SELECT @cmd = 'SET NOCOUNT ON;SELECT * FROM OPENROWSET(''SQLNCLI'', ''Server=' + @serveur + ';'
+ 'uid=' + CASE @serveur
WHEN 'server1' THEN 'usera'
ELSE 'userb'
END + ';'
+ 'pwd='+ CASE @serveur
WHEN 'server1' THEN 'pass1'
WHEN 'server2' THEN 'pass2'
ELSE 'commonpass'
END + ';'''
+ ', ''select @@version'')'
INSERT INTO @tempdata(scratch) EXEC (@cmd)
SELECT @version = convert(nvarchar(255),scratch) from @tempdata
DELETE FROM @tempdata
UPDATE #Liste_Serveurs SET Server_Version = @version WHERE Nom_Serveur = @serveur
END
FETCH NEXT FROM Liste_Serveurs INTO @serveur
END
CLOSE Liste_Serveurs
DEALLOCATE Liste_Serveurs
SELECT * FROM #Liste_Serveurs
DROP TABLE #Liste_Serveurs