¿Cómo se desincroniza el nombre de la vista con la definición de la vista?

enter image description here

Rastreé un error en mi sistema para esta anomalía, al menos es una anomalía en mi sistema de 15 catálogos con esquemas similares pero desiguales.

¿Qué hace que [TABLE_NAME] en [INFORMATION_SCHEMA].[VIEWS] sea diferente del valor en [VIEW_DEFINITION]?

Me hace pensar que no entiendo algo sobre las vistas o las tablas del sistema en SQL Server... .

preguntado el 22 de mayo de 12 a las 17:05

1 Respuestas

Si ha cambiado el nombre de la vista, el nombre cambia, pero la definición no.

Debes hacer esto como un DROP/CREATE o un ALTER script, no haciendo clic derecho o usando sp_rename.

En realidad, este es el comportamiento esperado para todos los módulos. Aquí hay una prueba rápida usando un procedimiento almacenado simple:

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'));

Resultados:

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;

En cualquier caso, no deberías usar INFORMATION_SCHEMA de todas formas...

respondido 10 nov., 18:21

Estoy seguro de que tiene razón acerca de cómo llegó a este estado. sp_refreshsqlmodule recibió un error que parecía que intentaba analizar la misma definición de vista obsoleta que está en INFORMATION_SCHEMA. Probé tu otro enfoque pero no sabía de dónde obtener la definición. Usar object_id de sys.view junto con los dos métodos para obtener una definición de vista que se encuentran en msdn.microsoft.com/en-us/library/ms345522.aspx#_FAQ35 produjo la definición obsoleta también. Finalmente escribí un guión ALTER VIEW en SMSS y simplemente lo ejecuté y felizmente resultó ser mi solución. - Aaron anoduro

La definición se encuentra en sys.sql_modules a la que te puedes unir sys.objects or sys.views on [object_id]. También puedes usar el OBJECT_DEFINITION() función de metadatos. - Aarón Bertrand

Gracias por las actualizaciones. Solo como antecedentes, este catálogo se creó durante mi segundo mes usando Sql Server en el trabajo y aún no me había dado cuenta de la utilidad del SCRIPT AS técnica y estoy aprendiendo ahora que SMSS llama a sp_rename en lugar de generar el apropiado ALTER declaración. - Aaron anoduro

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.