在您阅读之前 - 这不是关于使用点(这是遗留问题,而其他人错误地选择在对象名称中使用点)。这是关于SQL Server在此特定(不良)情况下的行为的问题。
我们的数据库有两种观点:
viewOne
和viewOne.bkp
是的,有人在视图名称中愚蠢地添加了一个点。
从第三方工具为这些对象生成的自动脚本为每个视图都有几个sp_refreshview
语句。
EXEC sp_refreshview N'[ourSchema].[viewOne]'
EXEC sp_refreshview N'[ourSchema].[viewOne.bkp]'
按上述顺序运行时,viewOne
的内容会被viewOne.bkp
的内容覆盖。
同样,假设对象名称中的点不是最佳实践,并且MS接受此作为"有效对象名称",如果模式是后者,为什么前者的内容会被后者覆盖?在两个陈述中定义并且存在两个不同的对象?
答案 0 :(得分:1)
我无法重现您的问题。你能提供重现问题的代码吗?
rextester:http://rextester.com/ZPXB17514
/* does sp_refreshview overwrite view definitions? */
create schema ourSchema authorization dbo;
go
create view ourSchema.viewOne as select * from pilots;
go
create view ourSchema.[viewOne.bkp] as select * from flights;
go
select * from ourSchema.ViewOne
select * from ourSchema.[ViewOne.bkp]
go
alter table dbo.pilots add new int not null default 1;
alter table dbo.flights add new int not null default 1;
go
/* before refresh, doesn't show new columns */
select * from ourSchema.[ViewOne]
select * from ourSchema.[ViewOne.bkp]
go
EXEC sp_refreshview N'[ourSchema].[viewOne]'
EXEC sp_refreshview N'[ourSchema].[viewOne.bkp]'
go
/* after refresh, shows new columns -- no view overwritten */
select * from ourSchema.[ViewOne]
select * from ourSchema.[ViewOne.bkp]
go