Home > FAQ > Una Vista che fa uso di SELECT * (star) riconosce le nuove colonne o quelle eliminate?

Una Vista che fa uso di SELECT * (star) riconosce le nuove colonne o quelle eliminate?

Una vista che utilizza la SELECT * (star) non è in grado di riconoscere una modifica intervenuta nella struttura delle tabelle da cui dipende (sia essa l’aggiunta che la eliminazione di colonna). Questo accade perchè la lista delle colonne viene interpretata solo al momento della CREATE della vista o eventualmente di una successiva ALTER.

Una alternativa alla ALTER è rappresentata dall’uso della stored procedure si sistema SP_REFRESHVIEW [ @viewname = ] ‘viewname’ che aggiorna la struttura della vista in base all’attuale struttura delle tabelle e viste di base. Da notare che se lanciata su una vista creata con l’opzione WITH SCHEMABINDING, la suddetta sp_refreshview restituisce un errore.

Per lanciare la sp_refreshview su tutte le viste di un database, si può ricorrere alla seguente user-defined stored procedures (valida per SQL Server 2005).

CREATE PROCEDURE RefreshAllView AS
BEGIN
    DECLARE views_cursor CURSOR
    FOR
    SELECT
        ‘[‘ + S.name + ‘.’ + O.name + ‘]’ As ViewName
    FROM
        sys.objects O
    INNER JOIN sys.schemas S
    ON O.schema_id = S.schema_id
    WHERE type=’V’

    OPEN views_cursor
 
    DECLARE @view nvarchar(256)
 
    FETCH NEXT FROM views_cursor INTO @view
    WHILE @@FETCH_STATUS = 0
    BEGIN
   
        SET @view = N’EXEC SP_REFRESHVIEW ‘ + @view
   
        BEGIN TRY
            EXEC sp_executesql @view
        END TRY
        BEGIN CATCH
            IF ERROR_NUMBER() = 8197
                PRINT ‘Impossibile eseguire’ + @view + ‘ perchè schemabinding’
        END CATCH

        FETCH NEXT FROM views_cursor INTO @view
    END
 
    CLOSE views_cursor
    DEALLOCATE views_cursor

END
GO

Chi è Davide Mauri

Microsoft Data Platform MVP dal 2007, Davide Mauri si occupa di Data Architecture e Big Data nel mondo dell'IoT. Attualmente ricopre il ruolo di "Director Software Development & Cloud Infrastructure" in Sensoria, societa specializzata nella creazione di Wearables e sensori per l'IoT applicati a tessuti ed oggetti sportivi.

Leggi Anche

Usare json su SQLServer 2005, 2008, 2012 e 2014 .. è possibile!

Vedere il supporto nativo di JSON su SQLServer 2016 (e anche su Azure SQLDatabase) mi …

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

twenty − = eighteen

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.