我在我的系统中追踪到这个异常的一个错误——至少它是我系统中的一个异常,它有 15 个目录,具有相似但不相等的模式。
是什么导致 [INFORMATION_SCHEMA].[VIEWS] 中的 [TABLE_NAME] 与 [VIEW_DEFINITION] 中的值不同?
这让我觉得我对 SQL Server 中的视图或系统表一无所知......
我在我的系统中追踪到这个异常的一个错误——至少它是我系统中的一个异常,它有 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
...