Con più domande
Allineare delle viste

Domanda
-
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 -
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.
-
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 -
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
ENDCLOSE views_cursor
DEALLOCATE views_cursor -
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- Proposto come risposta Mila Daniel Ovidiu lunedì 28 febbraio 2011 15:24