Sql server 2008 r2 视图名称如何与视图定义不同步?
我在我的系统中找到了一个bug来发现这个异常——至少在我的15个目录的系统中,它是一个异常,具有相似但不同的模式 是什么导致[INFORMATION_SCHEMA].[VIEWS]中的[TABLE_NAME]与[VIEW_DEFINITION]中的值不同 这让我觉得我不了解SQL Server中的视图或系统表。。。Sql server 2008 r2 视图名称如何与视图定义不同步?,sql-server-2008-r2,system-tables,Sql Server 2008 R2,System Tables,我在我的系统中找到了一个bug来发现这个异常——至少在我的15个目录的系统中,它是一个异常,具有相似但不同的模式 是什么导致[INFORMATION_SCHEMA].[VIEWS]中的[TABLE_NAME]与[VIEW_DEFINITION]中的值不同 这让我觉得我不了解SQL Server中的视图或系统表。。。 .如果重命名了视图,则名称会更改,但定义不会更改 您应该以拖放/创建或更改脚本的方式执行此操作,而不是通过右键单击或使用sp\u重命名 这实际上是所有模块的预期行为。下面是一个使用简
.如果重命名了视图,则名称会更改,但定义不会更改 您应该以
拖放
/创建
或更改
脚本的方式执行此操作,而不是通过右键单击或使用sp\u重命名
这实际上是所有模块的预期行为。下面是一个使用简单存储过程的快速测试:
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;
无论如何,您都不应该使用信息\u模式
拖放
/创建
或更改
脚本的方式执行此操作,而不是通过右键单击或使用sp\u重命名
这实际上是所有模块的预期行为。下面是一个使用简单存储过程的快速测试:
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;
无论如何,您都不应该使用信息\u模式
sp_refreshsqlmodule
出现一个错误,看起来它试图解析与信息\u架构
中相同的陈旧视图定义。我试过你的其他方法,但我不知道从哪里来定义。将sys.view中的object_id与获取在中找到的视图定义的两种方法结合使用,也会生成过时的定义。最后,我在SMSS中编写了一个alterview
,并运行了它,很高兴这就是我的修复方案!您可以在定义中加入到[object\u id]
或在其上加入。您也可以使用元数据功能。感谢更新。就是一些背景,,这个目录是在我工作的第二个月使用Sql Server创建的,我还没有意识到脚本作为
技术的有用性,我刚刚了解到SMSS调用sp_rename而不是生成适当的ALTER
语句。我相信您对它进入这种状态的方式是正确的sp_refreshsqlmodule
出现一个错误,看起来它试图解析与信息\u架构
中相同的陈旧视图定义。我试过你的其他方法,但我不知道从哪里来定义。将sys.view中的object_id与获取在中找到的视图定义的两种方法结合使用,也会生成过时的定义。最后,我在SMSS中编写了一个alterview
,并运行了它,很高兴这就是我的修复方案!您可以在定义中加入到[object\u id]
或在其上加入。您也可以使用元数据功能。感谢更新。正如一些背景知识一样,这个目录是在我工作的第二个月使用Sql Server创建的,我还没有意识到脚本作为
技术的有用性,我刚刚了解到SMSS调用sp_rename而不是生成适当的ALTER
语句。