视图名称如何与视图定义不同步?

时间:2012-05-22 16:35:43

标签: sql-server-2008-r2 system-tables

enter image description here

我在我的系统中找到了一个错误的异常 - 至少在我的15个目录系统中有一个异常,它有相似但不相等的模式。

是什么导致[INFORMATION_SCHEMA]。[VIEWS]中的[TABLE_NAME]与[VIEW_DEFINITION]中的值不同?

这让我觉得我对SQL Server中的视图或系统表不了解...

1 个答案:

答案 0 :(得分:3)

如果您重命名了视图,则名称会更改,但定义不会更改。

您应该以{{1​​}} / DROPCREATE脚本执行此操作,而不是右键单击或使用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; ......