In che modo il nome della vista esce dalla sincronizzazione con la definizione della vista?

StackOverflow https://stackoverflow.com//questions/10706260

  •  13-12-2019
  •  | 
  •  

Domanda

Inserire la descrizione dell

Ho rintracciato un bug nel mio sistema a questa anomalia - almeno è un'anomalia nel mio sistema di 15 cataloghi con schemi simili ma ineguali.

Cosa causa [table_name] in [informazioni_schema]. [Visualizzazioni] per essere diverso dal valore in [View_Definition]?

Mi fa pensare che non capisca qualcosa su viste o tabelle di sistema in SQL Server ... .

È stato utile?

Soluzione

Se si è rinominata la vista, il nome cambia, ma la definizione no.

Dovresti farlo come un DROP / CREATE o uno script ALTER, non facendo clic con il pulsante destro del mouse o utilizzando sp_rename.

Questo è effettivamente il comportamento previsto per tutti i moduli.Ecco un test rapido utilizzando una semplice procedura memorizzata:

CREATE PROCEDURE dbo.proc_foo
AS
    SELECT 1;
GO

-- rename it to proc_bar

EXEC sys.sp_rename N'dbo.proc_foo', N'proc_bar', N'OBJECT';
GO

-- check the definition from various sources

SELECT od = OBJECT_DEFINITION(OBJECT_ID(N'dbo.proc_bar')),
    info_s = (SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES 
              WHERE ROUTINE_NAME = N'proc_bar' AND SCHEMA_NAME = N'dbo'),
    sql_m = (SELECT definition FROM sys.sql_modules 
             WHERE [object_id] = OBJECT_ID(N'dbo.proc_bar'));
.

Risultati:

od                             info_s                         sql_m
-----------------------------  -----------------------------  -----------------------------
CREATE PROCEDURE dbo.proc_foo  CREATE PROCEDURE dbo.proc_foo  CREATE PROCEDURE dbo.proc_foo
AS                             AS                             AS
    SELECT 1;                      SELECT 1;                      SELECT 1;
.

In ogni caso, non dovresti usare INFORMATION_SCHEMA comunque ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top