Как название вида не синхронизируется с определением вида?

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

  •  13-12-2019
  •  | 
  •  

Вопрос

enter image description here

Я отследил ошибку в своей системе, связанную с этой аномалией - по крайней мере, это аномалия в моей системе из 15 каталогов с похожими, но неодинаковыми схемами.

Что приводит к тому, что [ИМЯ_ТАБЛИЦЫ] в [INFORMATION_SCHEMA].[VIEWS] отличается от значения в [VIEW_DEFINITION]?

Это заставляет меня думать, что я чего-то не понимаю в представлениях или системных таблицах в SQL Server....

Это было полезно?

Решение

Если вы переименовали представление, название изменится, но определение - нет.

Вы должны сделать это как DROP/CREATE или ан ALTER скрипт, а не щелчком правой кнопки мыши или с помощью sp_rename.

На самом деле это ожидаемое поведение для всех модулей.Вот краткий тест с использованием простой хранимой процедуры:

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

Результаты:

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;

В любом случае, вам не следует использовать INFORMATION_SCHEMA в любом случае...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top