标签: view

查看光盘使用情况

这个说法正确吗?

在幕后 SQL Server 实际上将视图中的数据存储为物理表,如果视图背后的任何数据发生更改,则必须更新该物理表

我做了一些搜索,但找不到任何关于视图如何在 SQL Server 中工作的资源。我一直认为除非您使用索引/物化视图,否则视图不会占用任何额外的数据空间。

谢谢

sql-server view disk-space

3
推荐指数
1
解决办法
99
查看次数

从视图中选择会显示错误的列集

我正在从 SQL Server 的视图中进行选择。如果我右键单击它并选择“选择前 n 行”,它会运行并显示 30 列。如果我在 ALTER 模式下打开视图(右键单击,脚本视图为等...),突出显示代码并运行它,我会得到 50 列。我应该得到 50 列,因为我刚刚添加了 20 个新列到提供视图的表中,并且在视图中我使用了“SELECT * FROM...”语句。

我已经刷新了 Views 文件夹,但这没有帮助。

任何人都知道为什么会出现差异,以及如何纠正它?

sql-server view

3
推荐指数
1
解决办法
3045
查看次数

在链接服务器上使用视图时出错

我有这个查询:

SELECT
    -
FROM -.dbo.tb1
WHERE 
    -IN
    (
        SELECT 
            CASE 
                WHEN EXISTS
                (
                    SELECT * 
                    FROM -.dbo.tb2U1 WITH (NOLOCK)
                    WHERE col1 = '8614'
                )
                THEN
                (
                    SELECT TOP (1)
                        CASE WHEN ISNULL(col2,0) IN (1,2,3,6,8) 
                            THEN '2'
                            ELSE '1'
                        END AS col3
                    FROM -.dbo.tb1U1 WITH (NOLOCK)
                    LEFT join -.dbo.tb3U2 WITH (NOLOCK)
                        ON U1.-= U2.-  
                    WHERE 
                        -= '8614'  
                    ORDER by 
                        -DESC
                )  
                ELSE '3'
            END
    );
Run Code Online (Sandbox Code Playgroud)

当我运行它时-,它没问题。它返回我想要的东西:

SELECT
    -
FROM -.dbo.tb1
WHERE 
    -IN
    (
        SELECT 
            CASE 
                WHEN EXISTS
                (
                    SELECT …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server view linked-server

3
推荐指数
1
解决办法
449
查看次数

使用视图的 SQL Server 执行计划,但存储过程中没有视图

我正在对这个缓慢的存储过程进行故障排除,在检查实际执行计划时,我注意到一个可能缺少索引的警告。仔细看看,它反对其中一个观点,而不是实际的表格。这怎么可能?

当然,物理表正在使用,但实际视图不是!

视图是这样的:

CREATE VIEW [ws].[MyVIEWTable]
WITH SCHEMABINDING
AS
SELECT col1, col2
  FROM [dbo].[MyTable]
Run Code Online (Sandbox Code Playgroud)

为什么 SQL Server 引擎使用视图来检索数据而不是实际的物理表,在这种情况下是dbo.MyTable

performance view sql-server-2012 query-performance

3
推荐指数
1
解决办法
598
查看次数

PostgreSQL:一个只能访问视图的登录角色

我需要编写一个必须执行以下操作的 SQL 文件:

  • 创建一个名为“选择”的角色

  • 授予对当前数据库的连接/使用权限

  • 授予选择/执行所有模式的所有视图(或至少在当前

我尝试了大量的 GRANT...ON...TO 组合,但我无法弄清楚。

附加信息:这些脚本由 ANT 执行,数据库和模式名称 (search_path) 已经设置。所以我不能烧录像“production_db”或“qa_db”这样的名字。

目标是创建单个 PostgreSQL 角色,以便客户端可以绕过 Tomcat (Hibernate) 并直接在 Postgres 服务器上运行选择/搜索。该角色必须能够从视图中进行选择,而不能从其他视图中进行选择。

更新:接受的答案让我找到了一个解决方案,我将所有视图提取到一个单独的架构中,并仅授予对该架构的访问权限。

postgresql permissions access-control view

3
推荐指数
1
解决办法
6559
查看次数

SQL Server 中带有 PIVOT 的索引视图

我的问题的简化版本如下:

我有三个表记录、输入和输出。

记录

Id DTS  
2015-01-01 00:00
...

输入

Id RecordId InputId Value
1   1   100  
... ...
1   1   105  

输出

Id RecordId OutputId Value
1   1   200  
... ...
1   1   10  

这样做是为了避免由于表中列数的限制而限制输入或输出的总数。我正在寻找针对类似于以下内容的查询的最佳(最快)方法:

DTS   Input1 ... InputN Output1 ... OutputM
2015-01-01 00:00 100   ... 105   200   ... 10  
...

我最初的计划是基于旋转必要的输入和输出并适当地加入它们来创建一个视图。数据只需要只读并且本质上是静态的,所以我想防止它为每个查询扩展。我读到我可以向视图添加索引以“具体化”它,但是如果视图使用 PIVOT,则无法做到这一点。

有没有人对我如何做到这一点有任何建议?或者,如果我以错误的方式处理这个问题,我很乐意接受建议。

performance sql-server pivot view

3
推荐指数
1
解决办法
4946
查看次数

在 2 个字符串片段之间查找子字符串

我试图在 Postgres 9.0 的 PostGIS 中填充一个视图,在这个视图中我希望它包含一个基于 2 个字符串位置的子字符串。请参阅下面的我的代码。

CREATE OR REPLACE VIEW vw_actions AS 
 SELECT ls.f_table_schema, ls.f_table_name, 
 (SELECT substr(ls.attribute_actions_text, 
 strpos(ls.attribute_actions_text, 'name="')+6, 
 strpos(ls.attribute_actions_text, '"/>') - 
 strpos(ls.attribute_actions_text, 'name="'))) AS actions
   FROM layer_styles ls;
Run Code Online (Sandbox Code Playgroud)

结果是它在使用 strpos 时不喜欢负数。我可以让它前进 6 个字符以从返回的子字符串中删除 'name="' 但不能删除 '"/>'。

它返回以下内容:

View SHED Database"/> 
Run Code Online (Sandbox Code Playgroud)

我希望它返回的地方:

View SHED Database
Run Code Online (Sandbox Code Playgroud)

任何建议将不胜感激。

补充:我发现如果我使用 9.1,我可以使用 strposrev 并且我认为以下代码会起作用:

CREATE OR REPLACE VIEW vw_actions AS 
 SELECT ls.f_table_schema, ls.f_table_name, 
 (SELECT substr(ls.attribute_actions_text::text, 
 strpos(ls.attribute_actions_text::text, 'name="'::text)+6, 
 strposrev(ls.attribute_actions_text::text, '"/>'::text)+3 - 
 strpos(ls.attribute_actions_text::text, 'name="'::text))) AS actions
   FROM layer_styles ls;
Run Code Online (Sandbox Code Playgroud)

postgresql view pattern-matching postgresql-9.0

3
推荐指数
1
解决办法
7614
查看次数

使用视图连接表或存储过程以获得更好的执行计划?

首先让我声明我是 C# 开发人员,而不是 SQL Server DBA,所以请原谅我对 SQL Server 数据库查询执行计划的无知。

我想知道的是对于使用主键和外键从两个或多个表中提取结果以引用它们的存储过程,是否更好的做法是:

  1. 有一个视图,视图执行连接并包含两个(或多个)表中所有相应记录的扁平化数据,并让存储过程从该视图中进行选择和过滤
  2. 存储过程进行连接和过滤

我问是因为在 C# 世界中,我们会将关注点分开,因此一个对象或函数将负责连接(在本例中为视图),另一个对象或函数将负责过滤(在本例中为存储过程) )。

  • 上面哪个选项会表现得更好?
  • 上面的哪个选项被认为是最佳实践?

在 C# 中,关注点分离通常被认为比性能更重要,直到证明性能已成为代码的严重问题。但是我不知道SQL世界里的东西堆起来了!

performance sql-server stored-procedures execution-plan view query-performance

3
推荐指数
1
解决办法
3598
查看次数

如果检查“为空”,则选择视图时性能不佳

我有两个非常简单的表,以及在bigint字段上加入它们的视图:

CREATE TABLE foo.ao (
  id serial NOT NULL,
  ao_id bigint NOT NULL,
  ao_plz text,
  ao_community text,
  ao_street text,
  ao_ms_id text,
  ao_status text DEFAULT 'Standard'::character varying,
  ao_has_eear boolean,
  ao_last_update timestamp without time zone,
  CONSTRAINT ao_pkey PRIMARY KEY (id),
  CONSTRAINT ao_id_unique UNIQUE (ao_id)
);

CREATE TABLE foo.ms (
  id serial NOT NULL,
  ms_nis_number text NOT NULL,
  ms_plz text,
  ms_community text,
  ms_street text,
  ms_status text DEFAULT 'Standard'::character varying,
  ms_coord_x integer,
  ms_coord_y integer,
  ms_ao_id bigint,
  CONSTRAINT ms_pkey PRIMARY KEY (id),
  CONSTRAINT …
Run Code Online (Sandbox Code Playgroud)

postgresql performance view postgresql-9.3 postgresql-performance

3
推荐指数
1
解决办法
765
查看次数

如何找到视图列的基表列?

我对 ERP 应用程序进行编程、管理和支持。我更常见的任务之一是了解数据的来源,找到应用程序中特定报告字段与其数据输入字段之间的链接。为此,我必须手动检查一个或多个视图的 DDL SQL 以了解表列,以便将一个视图的表列与另一个视图的表列进行匹配。此手动任务可能需要检查四个或五个抽象层。

是否有一种更快的方法来检查元数据以查找如何从其基表列计算视图列?有没有办法检查 Oracle 的执行计划以查看重写的查询,跳过对中间视图的手动检查?

oracle oracle-11g-r2 dml view

3
推荐指数
1
解决办法
513
查看次数