我在我的系统中找到了一个错误的异常 - 至少在我的15个目录系统中有一个异常,它有相似但不相等的模式。
是什么导致[INFORMATION_SCHEMA]。[VIEWS]中的[TABLE_NAME]与[VIEW_DEFINITION]中的值不同?
这让我觉得我对SQL Server中的视图或系统表不了解...
答案 0 :(得分:3)
如果您重命名了视图,则名称会更改,但定义不会更改。
您应该以{{1}} / 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;
......