Comment le nom de la vue n'est-il pas synchronisé avec la définition de la vue ?
-
13-12-2019 - |
Question
J'ai repéré un bug dans mon système lié à cette anomalie - du moins c'est une anomalie dans mon système de 15 catalogues avec des schémas similaires mais inégaux.
Qu'est-ce qui fait que [TABLE_NAME] dans [INFORMATION_SCHEMA].[VIEWS] est différent de la valeur dans [VIEW_DEFINITION] ?
Cela me fait penser que je ne comprends pas quelque chose aux vues ou aux tables système dans SQL Server....
La solution
Si vous avez renommé la vue, le nom change, mais pas la définition.
Vous devriez le faire en tant que DROP
/CREATE
ou un ALTER
script, pas en cliquant avec le bouton droit ou en utilisant sp_rename
.
Il s'agit en fait du comportement attendu pour tous les modules.Voici un test rapide utilisant une simple procédure stockée :
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'));
Résultats:
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;
Dans tous les cas, vous ne devriez pas utiliser INFORMATION_SCHEMA
de toute façon...