SQL Używanie baz danych zdefiniowanych w tabeli

0

Witam, na samym początku chciałbym zaznaczyć, że jestem początkujący w temacie i uprzejmie zwracam się z prośbą o pomoc,
Mam bazę danych powiedzmy " baza_glowna", która zawiera tabele z nazwami innych baz danych na serwerze i ich parametrami ( ID, nazwa_bazy, parametr_n)
Czy jest możliwość skonstruowania zapytania tak, żeby :
1.odpytać nazwy z baza_glowna dla parametr_n =2,
2.wykonać polecenie tylko dla baz, które spełniają w/w parametr

Baz jest sporo, bo ponad 250 więc ciężko odpytywać każdą osobno...
Będę wdzięczny za jakiś trop :)
pozdrawiam

0

Pierwsze primo: nie sprecyzowałeś o którą bazę danych Ci chodzi.

Drugie primo: we wszystkich znanych mi bazach nazwy tabel w zapytaniu muszą być określone wprost - nie możesz zrobić niczego w stylu select from (select db_name from ...) (tzn. możesz - ale służy to akurat czemuś innemu).

Bez wykorzystania dodatkowego języka (np. PHP, Pythona etc.), nie da rady.

0
  1. Zwykły select z warunkiem parametr_n =2
  2. Tak skrypt w języku zorientowanym na bazę w której trzymasz dane.
0

Czyli tak punkt pierwszy osiągnę przez :"SELECT nazwa_bazy FROM baza_glowna WHERE parametr_n=2"
a dla punktu drugiego zostaje mi jedynie napisanie czegoś z zewnątrz SQL, co zbierze dane z zapytania i w zapętleniu wykona to polecenie?

0

Jaki silnik?

SELECT nazwa_bazy FROM baza_glowna WHERE parametr_n=2

To sugeruje że masz tabelę: baza_glowna, a nie bazę danych...

0
Panczo napisał(a):

Jaki silnik?

SELECT nazwa_bazy FROM baza_glowna WHERE parametr_n=2

To sugeruje że masz tabelę: baza_glowna, a nie bazę danych...

MS SQL,
Tak przepraszam, miało być:
USE baza_glowna
SELECT nazwa_bazy FROM bazy_danych WHERE parametr_n=2

0

No to kursor i odwoływanie się do obiektów poprzez nazwa_bazy.schemat.tabela:

DECLARE @DB navarchar(150)
DECLARE @sql nvarchar(max)
DECLARE C CURSOR LOCAL FAST_FORWARD
  FOR SELECT nazwa_bazy FROM baza_glowna WHERE parametr_n=2;

OPEN C;

FETCH NEXT FROM C INTO @DB;
WHILE (@@FETCH_STATUS = 0)
BEGIN 
    PRINT @SN;
    -- tu klecisz zapytanie do puszczenia na bazie
    SET @sql = N'SELECT * FROM ' + QUOTENAME(@DB) + '.dbo.tabela;';
    EXEC sys.sp_executesql @sql;
    FETCH NEXT FROM C INTO @DB;
END 
CLOSE C;
DEALLOCATE C;

1 użytkowników online, w tym zalogowanych: 0, gości: 1