In che modo il nome della vista esce dalla sincronizzazione con la definizione della vista?
-
13-12-2019 - |
Domanda
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 ... .
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 ...