Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 r2 视图名称如何与视图定义不同步?_Sql Server 2008 R2_System Tables - Fatal编程技术网

Sql server 2008 r2 视图名称如何与视图定义不同步?

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重命名 这实际上是所有模块的预期行为。下面是一个使用简

我在我的系统中找到了一个bug来发现这个异常——至少在我的15个目录的系统中,它是一个异常,具有相似但不同的模式

是什么导致[INFORMATION_SCHEMA].[VIEWS]中的[TABLE_NAME]与[VIEW_DEFINITION]中的值不同

这让我觉得我不了解SQL Server中的视图或系统表。。。
.

如果重命名了视图,则名称会更改,但定义不会更改

您应该以
拖放
/
创建
更改
脚本的方式执行此操作,而不是通过右键单击或使用
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
语句。