我有一个非常奇怪的问题,我可以重现一个视图。我很确定某些视图元数据不是最新的并导致此问题......
简而言之:
我试着查看SP sp_refreshview,但他刚刚执行了另一个名为sp_refreshsqlmodule_internal的SP。我没有在master数据库的系统存储过程中看到这个视图:(
我的问题实际上是通过删除“MyTestViewOld”来修复的,但我想知道到底发生了什么! Tnx
这里重现问题的脚本! (请逐步执行)
--create a test table
create table dbo.MyTestContacts(
[Title] [varchar](20) NULL,
[Name] [varchar](255) NULL,
[FirstName] [varchar](255) NULL,
[Telephone] [varchar](50) NULL,
[Email] [varchar](255) NULL
)
--insert data in the temp table
insert dbo.MyTestContacts values ('Mr', 'Holly', 'Buddy', '0123456798', 'buddy@holly.co')
insert dbo.MyTestContacts values ('Mr', 'Valens', 'Ritchie', '987654312', 'ritchie@valens.co')
insert dbo.MyTestContacts values ('Mr', 'Richardson', 'Jiles Perry', '987654312', 'jp@richardson.co')
--create a view
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create view dbo.MyTestView as
select Title, Name, FirstName from dbo.MyTestContacts
GO
--do a SCRIPT VIEW AS / ALTER TO in sql management studio to verify the view implementation
--rename the view
exec sp_rename 'dbo.MyTestView', 'MyTestViewOld'
--BIS1 (explained below; used in a 2nd test run)
--create a view with the same name as the first view, but different implementation!
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create view dbo.MyTestView as
select Title, Name, FirstName, Telephone from dbo.MyTestContacts
GO
--do a SCRIPT VIEW AS / ALTER TO in sql management studio to verify the view implementation of MyTestView (telephone is added)
--perform a refreshView action on the MyTestViewOld view
exec sp_refreshview 'dbo.MyTestViewOld'
--do a SCRIPT VIEW AS / ALTER TO in sql management studio to verify the view implementation of MyTestView --> THIS SHOWS THE MyTestViewOld IMPLEMENTATION!!!!
--(BIS1) Note that this sequence gets broken when I do an ALTER VIEW on MyTestViewOld right after the rename!
--SET ANSI_NULLS ON
--GO
--SET QUOTED_IDENTIFIER ON
--GO
--alter view dbo.MyTestViewOld as
--select FirstName, Name, Email, Telephone from dbo.MyTestContacts
--GO
--drop everything
drop view dbo.MyTestViewOld
drop view dbo.MyTestView
drop table dbo.MyTestContacts
答案 0 :(得分:1)
sp_rename
相当不完美,并且在大多数对象类型上使用它时会有很多警告:
更改对象名称的任何部分都可能会破坏脚本和存储过程。我们建议您不要使用此语句重命名存储过程,触发器,用户定义的函数或视图;相反,删除对象并使用新名称重新创建它。
虽然没有关于您发现的情景的具体警告,但有一些线索可以解决导致问题的潜在途径:
重命名存储过程,函数,视图或触发器不会更改
sys.sql_modules
目录视图的定义列中相应对象名称的名称
而且,正如您所发现的,刷新视图的内部方法是sp_refreshsqlmodule_internal
- 因此我建议在“模块”级元数据内部构建它的某种形式的错误。
您可能需要考虑在SQL Server Connect上提出问题,如果没有其他原因,可以在其他地方记录错误,并且(可能)让他们在产品文档中添加进一步的警告。
答案 1 :(得分:0)
也遇到了这个问题。我使用以下查询来识别数据库中可能导致问题的任何视图:
add_action( 'wp_ajax_et_contact_modal', 'et_contact_modal' );