我有一个简单的分层表。假设它有这些列:
Id, [Guid], ParentId, Title
Run Code Online (Sandbox Code Playgroud)
只有可以ParentId为空。其他列不可为空。
我创建了一个递归查询来显示从节点到根的路径。为此,我使用了 CTE。这是我的查询:
with Anchor (Id, [Guid], ParentId, Title, [Path])
as
(
select Id, [Guid], ParentId, Title, cast('' as nvarchar(100)) as [Path]
from Hierarchies
where ParentId is null
union all
select Hierarchies.Id, Hierarchies.[Guid], Hierarchies.ParentId, Hierarchies.Title, cast(Anchor.[Path] + '/' + Hierarchies.Title as nvarchar(100)) as [Path]
from Hierarchies
inner join Anchor
on Hierarchies.ParentId = Anchor.Id
)
select
isnull(Anchor.Id, 0) as Id,
isnull(Anchor.[Guid], newid()) as [Guid],
Anchor.ParentId,
Anchor.Title,
Anchor.[Path]
from Anchor
Run Code Online (Sandbox Code Playgroud)
问题是,当我将此查询转换为视图时,该Guid列变为可以为空。我什至使用isnull()函数来强制它不为空。令我惊讶的是,这 …
SQL Server 能够创建错误的同义词。例如:
create synonym Sample for NonExistingObject
Run Code Online (Sandbox Code Playgroud)
这实际上创建了Sample同义词。
此外,还可以创建一个有效的视图,然后更改该视图所依赖的基础表,使该视图不再起作用。
我正在创建一个实用程序来自动执行与数据库以及许多模块和许多客户相关的一些任务。
我面临的一个问题是某些视图依赖于稍后添加的不存在的对象。
我想知道是否可以为create view语句提供一个标志来强制 SQL Server 不验证视图的定义而只构建它?