enter image description here

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

是什么导致 [INFORMATION_SCHEMA].[VIEWS] 中的 [TABLE_NAME] 与 [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