Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    181

    [SQL Server 2008] Dati globali del db ed informazioni in esso contenute

    Ciao a tutti,

    sto provando a far eseguire una query su Sql Server 2008 Express. La query che sto provando ad eseguire la faccio eseguire sul db master perchè vorrei informazioni globali sugli altri database presenti sulla macchina, ma vorrei anche delle informazioni presenti nelle tabelle presenti di questi database.

    La query è strutturata così:
    codice:
    select [name] as NomeDB, query1.Nome + ' ' + query1.Cognome AS Persona, 
    	   query1.Mail AS Mail_Utente
    from sys.databases,
    	 (select nome, cognome, mail 
    	  from tabUtente
    	 ) as query1
    where [name] not in ('master','model','msdb','tempdb')
    Solo che questa query mi ritorna l'errore "Msg 208, Level 16, State 1, Line 1
    Invalid object name 'tabUtente'."

    Come potrei fare per poter ricavare in un'unica query i dati globali del db ed ottenere al tempo stesso alcune delle informazioni in esso contenute?

    Grazie mille in anticipo

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Non ho capito tutto, Ma:


    se esegiu una query ( o vista ) su un DB e vuoi informazioni
    che si trovano su tabelle di altri DB devi usare la definizione
    delle tabelle con 3 punti


    Esempio:
    codice:
    SELECT
      NT.Id,
      NT.Nome
    FROM
      NomeDB.dbo.NomeTabella AS NT

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    181
    Grazie per la risposta che mi ha confermato quello che in effetti volevo fare. Ma il punto è che a priori io non so quanti e quali db avrò sulla macchina ecco quindi che nasce l'esigenza di avere un modo che mi prenda i nomi di tutti i db e prendere da essi i valori che mi servono.

    Chiedo scusa se prima sono stato poco chiaro e spero che adesso lo sia stato di più

    Grazie ancora in anticipo

  4. #4
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Direi che è possibile, ma io non ne sarei capace.


    Riesco solo a intravedere la strada.

    _________________________________________

    Dal DB Master prelevi i nomi dei DB della istanza
    Magari prelevi anche i nomi delle tabelle


    li fai diventare delle "variabili"

    inserisci queste variabili in una vista che ti restituisce
    quello che cerchi.


    _____________________________________________


    Il giochetto lo potresti fare direttamente
    con TransactSQL in ManagementStudio

    oppure usando il VBA di Access perche
    anche lui accetta delle variabili nei testi delle viste

    ______________________________________________


    La cosa mi incuriosisce quindi chiedo a mia volta:

    Nel DB Master
    ___ dove trovo i nomi dei DB della istanza
    ___ dove trovo i nomi delle tabelle dei DB
    ___ dove trovo i nomi dei campi delle tabelle

    Poi la strada dovrebbe essere in discesa


  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    181
    Ciao a tutti e grazie per i vostri suggerimenti.

    La strada che sto percorrendo è proprio una di quelle che avete proposto, cioè scrivere una Stored Procedure che mi permetta di ottenere le informazioni globali sui db presenti sulla macchina e memorizzarle in delle variabili e poi a partire da esse fare le query sui singoli db magari in un ciclo.

    Per ora sono riuscito a scrivere una stored procedure che ritorna il nome dei db con il loro stato(ONLINE, OFFLINE, ecc...)

    A presto

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    181
    Ciao a tutti,

    credo di aver risolto il problema.
    In pratica ho costruito una stored procedure dove faccio una query sulla vista sysdatabases e mi faccio ritornare da questa i dati globali dei miei database. Quindi faccio un ciclo while sulla tabella appena costruita con FETCH NEXT, ad ogni iterazione ho il nome del database e vado a fare una query sulle tabelle interne del database corrente e le informazioni vengono inserite in una tabella temporanea, quindi su questa tabella viene fatta un UPDATE con i dati globali ricavati dalla prima query e così ho la tabella unica con i dati globali con quelli interni del db.

    Ecco il codice:
    codice:
    SET NOCOUNT ON
    OPEN curRecurse 
    FETCH NEXT FROM curRecurse INTO @name, @state_desc
    	
    WHILE (@@FETCH_STATUS <> -1 )
    BEGIN
       SET @db = '[' + @name + ']'
       SET @SQL1 = 'select '' '', ' + @db + '.dbo.tabella1.nome + '' '' + ' + @db + '.dbo.tabella1.cognome AS Persona, ' + @db + '.dbo.tabella1.mail AS MailUtente, ' + @db + '.dbo.tabella1.ruolo AS Ruolo from ' + @db + '.dbo.tabella1 where ' + @db + '.dbo.tabella1.ruolo = ''MioRuolo'''
       INSERT INTO @tableResult1 EXEC(@SQL1)
       UPDATE @tableResult1 SET nomedb = @name, stato = @state_desc FROM @tableResult1 where nomedb = ' '
       FETCH NEXT FROM curRecurse INTO @name, @state_desc
    END
    CLOSE curRecurse
    DEALLOCATE curRecurse
    SELECT DISTINCT * FROM @tableResult1
    RETURN (0)
    Grazie a tutti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.