none
Allineare delle viste RRS feed

  • Domanda

  • Salve,

    Ho bisogno di allineare la struttura delle tabelle contenute nelle viste con il DB a cui fanno riferimento.

    Esiste un modo massivo, uno script, un'utility.

    Grazie. 

    mercoledì 9 febbraio 2011 09:17

Tutte le risposte

  • Che cosa intendi ? Quando crei una vista, SQL Server verifica che la sintassi sia corretta e che il/i database(s) ed i campi esistano, quindi non può essere disallineata.

    Puoi esportare la struttura delle viste utilizzando la funzione di  scripting del database (tasto destro sul database -> Tasks -> Generate scripts), che tra l'altro ti può essere di aiuto per tenerti la storia delle versioni degli oggetti contenuti nel database, ma ti serve solamente per visualizzare la struttura ed eventualmente rigenerare gli oggetti, non per controllarla o riallinearla...


    Danilo Dominici MCP MCDBA MCITP MCSE MCAD
    mercoledì 9 febbraio 2011 12:45
  • Grazie della risposta,

     

    Mi spiego meglio: Ho un db che si chiama DB1 e un'altro DB2

    Il DB1 è il db principale nel DB2 esistono le viste create con relativi filtri e condizioni, se io modifico le strutture delle tabelle del DB1 chiaramente non vengono riportate nelle viste del DB2 e cercavo un modo per farlo automaticamente visto che le viste sono tante.

     

    Grazie.

    mercoledì 9 febbraio 2011 13:32
  • Esistono prodotti commerciali come Sql Prompt di Red Gate o Apex Sql Refactor che ti permettono di rinominare un oggetto (tabella, vista, stored procedure, funzione, campo) ed aggiornare tutte le dipendenze. Non so dirti se funziona anche cross-database.

    In alternativa puoi sfruttare un DDL trigger che tracci l'evento ALTER TABLE sul database DB1 e faccia le dovute modifiche alle viste su DB2, ma è tutto da sviluppare.

     


    Danilo Dominici MCP MCDBA MCITP MCSE MCAD
    mercoledì 9 febbraio 2011 17:54
  • Ok,

     

    provero i tuoi consigli ma intanto ti passo uno script dove ti chiedo un piccola aiutino, visto che non sono uno sviluppatore.

     

    Questo script come SP risolve in parte i miei problemi, ma agisce sullo stesso DB, ti chiedo gentilmente la modica per poter passare come parametro il DB1 sorgente, e DB2 dove contiene le viste. Grazie.

    DECLARE views_cursor CURSOR FOR SELECT name FROM sysobjects WHERE type='V'
    OPEN views_cursor
    DECLARE @view varchar(256)

    FETCH NEXT FROM views_cursor INTO @view
     WHILE @@FETCH_STATUS = 0
      BEGIN
       EXEC SP_REFRESHVIEW @view
       FETCH NEXT FROM views_cursor INTO @view
      END

    CLOSE views_cursor
    DEALLOCATE views_cursor

     

     

    giovedì 10 febbraio 2011 10:43
  • Sorry, avevo dimenticato che puoi usare anche la extended stored procedure sp_refreshview.

    Se non ricordo male pensa lei a risolvere i nomi cross-database, quindi eseguendola già così (a patto che nella vista referenzi il nome completo delle tabelle - database.schema.tabella) dovrebbe funzionare.

     


    Danilo Dominici MCP MCDBA MCITP MCSE MCAD
    giovedì 10 febbraio 2011 11:16