none
Ricerca dato in tutte le tabelle del DB RRS feed

  • Domanda

  • Buongiorno a tutti,

    immaginiamo un'istanza così composta:

    Tabella: DB1.dbo.NOMI

    Tabella: DB2.dbo.COSE

    Avrei necessità di cercare "Pisa" e di sapere a quale DB e quale tabella faccia riferimento.

    Ho pensato anche ad un cursore, anche se non sono forte, ma il punto è che non so dove trovare quella che in PL/SQL è DBA_TABLES.

    ho provato con:

    select * from information_schema.tables
    select * from information_schema.columns

    ma mi escono solo tabelle di MASTER.

    Grazie a tutti.

    mercoledì 7 ottobre 2015 08:35

Risposte

  • Buonasera Andrea,

    in SQL Server, si può effettuare una SELECT verso le tabelle sys.tables e sys.columns. Le due sono legate dal campo object_id, di conseguenza possono essere messe in JOIN in questo modo

    SELECT *
    FROM sys.tables INNER JOIN sys.columns ON sys.tables.object_id = sys.columns.object_id

    Se hai necessità di far interagire le tabelle su database diversi, è sufficiente anteporre il nome di database a quello di tabella (nella query di cui sopra, ad esempio, "sys.tables" può essere scritta come "[DB1].sys.tables").

    Spero di esserti stato di aiuto


    Emiliano Musso // Microsoft MVP .NET

    • Contrassegnato come risposta Andrea(ilcress) giovedì 8 ottobre 2015 06:36
    mercoledì 7 ottobre 2015 15:59
  • Buonasera Andrea,

    le select rendono solo gli oggetti del database master perché le esegui nel contesto di una connessione aperta sul db master.

    per rendere la select indipendente dal db a cui sei connesso puoi fare :

    select * from DB1.information_schema.tables
    select * from DB1.information_schema.columns
    select * from DB2.information_schema.tables
    select * from DB2.information_schema.columns

    Ciao
    Giorgio Rancati

    • Contrassegnato come risposta Andrea(ilcress) giovedì 8 ottobre 2015 06:36
    mercoledì 7 ottobre 2015 21:10
    Moderatore

Tutte le risposte

  • Buonasera Andrea,

    in SQL Server, si può effettuare una SELECT verso le tabelle sys.tables e sys.columns. Le due sono legate dal campo object_id, di conseguenza possono essere messe in JOIN in questo modo

    SELECT *
    FROM sys.tables INNER JOIN sys.columns ON sys.tables.object_id = sys.columns.object_id

    Se hai necessità di far interagire le tabelle su database diversi, è sufficiente anteporre il nome di database a quello di tabella (nella query di cui sopra, ad esempio, "sys.tables" può essere scritta come "[DB1].sys.tables").

    Spero di esserti stato di aiuto


    Emiliano Musso // Microsoft MVP .NET

    • Contrassegnato come risposta Andrea(ilcress) giovedì 8 ottobre 2015 06:36
    mercoledì 7 ottobre 2015 15:59
  • Buonasera Andrea,

    le select rendono solo gli oggetti del database master perché le esegui nel contesto di una connessione aperta sul db master.

    per rendere la select indipendente dal db a cui sei connesso puoi fare :

    select * from DB1.information_schema.tables
    select * from DB1.information_schema.columns
    select * from DB2.information_schema.tables
    select * from DB2.information_schema.columns

    Ciao
    Giorgio Rancati

    • Contrassegnato come risposta Andrea(ilcress) giovedì 8 ottobre 2015 06:36
    mercoledì 7 ottobre 2015 21:10
    Moderatore