视图名称如何与视图定义不同步?
-
13-12-2019 - |
题
我在我的系统中追踪到了这个异常的错误 - 至少这是我的系统中的一个异常,该系统有 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
反正...
不隶属于 StackOverflow