0

在此处输入图像描述

我在我的系统中追踪到这个异常的一个错误——至少它是我系统中的一个异常,它有 15 个目录,具有相似但不相等的模式。

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

这让我觉得我对 SQL Server 中的视图或系统表一无所知......

4

1 回答 1

3

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

您应该将其作为DROP/CREATEALTER脚本来执行,而不是通过右键单击或使用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...

于 2012-05-22T16:38:42.977 回答