小编web*_*ner的帖子

为什么我的非空列在我的 CTE 递归查询中变得可以为空?

我有一个简单的分层表。假设它有这些列:

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()函数来强制它不为空。令我惊讶的是,这 …

null sql-server cte recursive

2
推荐指数
1
解决办法
69
查看次数

是否可以强制 SQL Server 创建错误的视图?

SQL Server 能够创建错误的同义词。例如:

create synonym Sample for NonExistingObject
Run Code Online (Sandbox Code Playgroud)

这实际上创建了Sample同义词。

此外,还可以创建一个有效的视图,然后更改该视图所依赖的基础表,使该视图不再起作用。

我正在创建一个实用程序来自动执行与数据库以及许多模块和许多客户相关的一些任务。

我面临的一个问题是某些视图依赖于稍后添加的不存在的对象。

我想知道是否可以为create view语句提供一个标志来强制 SQL Server 不验证视图的定义而只构建它?

sql-server view

0
推荐指数
1
解决办法
685
查看次数

标签 统计

sql-server ×2

cte ×1

null ×1

recursive ×1

view ×1