标签: view

加入到@Table 变量运行效率低下

好的,所以我有一个运行非常缓慢的报告存储过程。客户抱怨报告无法运行,所以我开始调查问题在存储过程中的确切位置,我发现这部分占用了 99.8% 的时间。

DECLARE @xmlTemp TABLE (
  CompanyID  INT,
  StoreID    INT,
  StartDate  DATETIME,
  DateStaID  INT,
  EndDate    DATETIME,
  DateEndID  INT,
  LastUpdate DATETIME)

INSERT INTO @xmlTemp
VALUES      (50,
             2,
             '3/3/2013',
             0,
             '3/3/2013',
             0,
             '3/3/2013')

SELECT DISTINCT T.CompanyID,
                CompanyName,
                Z.StoreID,
                StoreName,
                CashedOutBy,
                TransactionID,
                RegisterID,
                BusinessDate,
                CashedOut,
                Total - Isnull((SELECT Sum(DISTINCT PaymentAmount)
                                FROM   vPullDrawerPayments
                                WHERE  CompanyID = T.CompanyID
                                       AND StoreID = T.StoreID
                                       AND TransactionID = T.TransactionID
                                       AND Isnull(PaymentType, 1) <> 1), 0) AS PaymentAmount,
                'Cash'                                                      AS PaymentDesc,
                CASE
                  WHEN Z.EndDate >= Z.LastUpdate THEN 1 …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server stored-procedures view

5
推荐指数
1
解决办法
5530
查看次数

按字段分割的频率分布

一些背景: 我有一个样本人口数据文件。数据文件中的每条记录都有一个频率权重(FIELD NAME: wgt),指示需要复制多少次记录才能获得真正的总体。数据在 Microsoft SQL 2008 R2 中设置。生成权重的频率分布以查看某种特定类型的记录是否以任何方式过度表示通常是一种很好的做法 - 从而帮助识别趋势/异常值。这个任务在 SQL 中很简单:

SELECT wgt, COUNT(*) FROM tablename 
GROUP BY wgt
Run Code Online (Sandbox Code Playgroud)

挑战: 我想根据其他值进一步分离这些频率。假设不同家庭规模的权重频率分布。实现此目的的一种方法是在上述语句中使用不同的 where 条件:

SELECT wgt, COUNT(*) FROM tablename 
WHERE household_size=x --x being the desired segment
GROUP BY wgt
Run Code Online (Sandbox Code Playgroud)

但是有没有办法用所有不同的段创建一个表?像这样的东西:

WGT |   SIZE1       SIZE2       SIZE3       SIZE4 
--------------------------------------------------
1   |    2,034      1,025       502         234 
2   |    215        253         142         23 
3   |    31         25          21          34 
4   |    7          1           3           7 
5   |    5          NULL        2           5 
6 …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures statistics view

5
推荐指数
1
解决办法
1万
查看次数

MySQL 慢从视图中选择

我很感激这个问题的方法,我在 mysql 中有一个彩票系统,这个系统每秒收到很多交易......很多!在允许下注之前,我需要检查每个数字的总金额,为此我有一个观点:

CREATE ALGORITHM=MERGE DEFINER=user@% SQL SECURITY DEFINER 
VIEW view_todays_bet AS select number, sum(bet_amout) as total_bet from salestable;
Run Code Online (Sandbox Code Playgroud)

有了这个视图,我就有了这个结果,例如:

Number total_bet

=====  ========

01 1500

05 2000

...

99 20
Run Code Online (Sandbox Code Playgroud)

所以当我有一个新的赌注时,我会从视图中进行选择,这就是问题出现的时候,例如,如果我想知道 05 号的余额,我会选择:

select total_bet from view_todays_bet where number = '05';
Run Code Online (Sandbox Code Playgroud)

如果我直接从主表进行选择,salestable我会被阻止,因为有很多来自其他投注的插入,但从视图中选择太慢。请给出一些关于这个问题的方法。

谢谢。

这是表的真实结构:标题/详细信息表和由两者连接而成的视图。

CREATE TABLE `sales_details` (
  `codpais` varchar(2) NOT NULL DEFAULT '',
  `numero` varchar(7) NOT NULL DEFAULT '',
  `verificador` varchar(10) NOT NULL DEFAULT '',
  `codterminal` varchar(8) NOT NULL DEFAULT '',
  `item` int(4) NOT NULL DEFAULT …
Run Code Online (Sandbox Code Playgroud)

mysql performance view query-performance

5
推荐指数
1
解决办法
9603
查看次数

如果更改满足绑定要求,我可以更改被模式绑定引用的视图吗?

在 SQL Server 2008 中,我有视图WITH SCHEMABINDING,我需要更改一个视图。

我正在更改列而不更改其别名,因此消费者不会受到影响。

如果我要删除所有其他依赖于此的视图,我将能够再次重新创建它们,因此SCHEMABINDING仍然有效。

我可以暂时禁用此视图上的架构锁ALTER吗?

或者我必须删除依赖视图并在更改后重新创建它们?

schema sql-server-2008-r2 view locking

5
推荐指数
1
解决办法
3617
查看次数

为什么不能使用“创建或替换”更改视图?

Postgresql 文档在这一点上很清楚:您不能更改现有视图的列。

新查询必须生成与现有视图查询生成的列相同的列(即,列名相同,顺序和数据类型相同)(...)

参考:http : //www.postgresql.org/docs/9.3/static/sql-createview.html

为什么我必须删除视图或更改它来修改它?

postgresql view

5
推荐指数
1
解决办法
9780
查看次数

我有一个 INSTEAD OF 触发器,但是当我插入视图时 PostgreSQL 仍然抱怨

我创建了一个视图和一个 INSTEAD OF 触发器,用于从该视图中插入/更新/删除。现在我尝试向视图中插入一些数据,PostgreSQL 返回以下错误(捷克语翻译:“chyba”=“error”,“Stav SQL”=“SQL state”):

ERROR:  cannot insert into view "ukaz_lok"
DETAIL:  Views that return columns that are not columns of their base relation are not automatically updatable.
HINT:  To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule.
********** Chyba **********

ERROR: cannot insert into view "ukaz_lok"
Stav SQL: 55000
Run Code Online (Sandbox Code Playgroud)

这发生在其他一些 INSTEAD OF 触发器之前 - 这个错误只持续了一段时间(几个小时?我不记得了)然后 PostgreSQL 找到了触发器。我尝试了各种事情(更改触发器,删除所有触发器和视图并重新创建它们等),但我不确定什么有效,只是有些东西有效。那么究竟如何让 PostgreSQL 识别触发器呢?

我在 Windows XP 32 位上有 PostgreSQL …

postgresql trigger view plpgsql

5
推荐指数
1
解决办法
1万
查看次数

如何检查更改视图/存储的 proc 脚本是否已成功运行

对于数据库部署,我在批处理文件中调用所有数据库架构更改并在目标数据库上运行它们。

有时我们有用于更改视图或存储过程的脚本。我想知道控制视图/sp 是否已成功更改并通过输出日志文件中的消息报告它的最佳方法是什么。

例如下面是我想要实现的伪代码:

IF 
(
ALTER VIEW vw_abc
.
.
.
.
) Failed THEN 

PRINT 'ALTER view vw_abc Failed'.
ELSE
PRINT 'ALTER view vw_abc Completed Successfully'
END
Run Code Online (Sandbox Code Playgroud)

输出消息将记录在由运行脚本的批处理文件生成的脚本日志文件中。

如果有任何我们可以检查的错误代码来做到这一点?任何的想法?

谢谢。

sql-server stored-procedures view sql-server-2014

5
推荐指数
1
解决办法
2752
查看次数

如何使执行连接的 Postgres 视图可更新?

我有两张桌子,products并且subscriptions

CREATE TABLE products (
    id bigint NOT NULL,
    title character varying(75),
    description text,
    manufacturer_id bigint,
    created_at timestamp without time zone,
    updated_at timestamp without time zone,
    mpn text,
    visible boolean DEFAULT false NOT NULL
);

CREATE TABLE subscriptions (
    id bigint NOT NULL,
    product_id bigint NOT NULL,
    user_id bigint NOT NULL,
    created_at timestamp without time zone,
    updated_at timestamp without time zone
);
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我通常需要知道某个产品的订阅者数量,而在应用程序中所有正确位置使用此逻辑是很棘手的。所以我想products用已经包含该信息的视图替换该表。所以我这样做了:

ALTER TABLE ONLY products
  RENAME TO products_raw;

CREATE VIEW products AS …
Run Code Online (Sandbox Code Playgroud)

postgresql join view update

5
推荐指数
1
解决办法
3121
查看次数

postgresql:从视图中删除

在 Postgresql 9.4 中,我们将视图作为表 A 和 B 的联合进行处理,并且当我们“删除”底层表中的记录时(通过 aa 触发器上的看法)。

这里有更详细的信息。我们的观点看起来像,

A
--
id, name
1, afoo
2, abar

B
--
id, name
3, bfoo
4, bbar
Run Code Online (Sandbox Code Playgroud)

所以我们的视图 C 看起来像

C
--
1, afoo
2, abar
3, bfoo
4, bbar
Run Code Online (Sandbox Code Playgroud)

我们做了一个CREATE TRIGGER delete_trigger INSTEAD OF DELETE C FOR EACH ROW DO delete_trigger(),它通过 id 删除行,这基本上就像

-- our function trigger():
$$
delete from A where id=old.id;
GET DIAGNOSTICS deletedA = ROW_COUNT;

delete from B where id=old.id;
GET DIAGNOSTICS deletedB = …
Run Code Online (Sandbox Code Playgroud)

postgresql trigger view postgresql-9.4

5
推荐指数
1
解决办法
2351
查看次数

在视图定义中使用 SELECT * 是否存在问题?

我正在为单独数据库中的视图创建多个代理视图。为了避免在两个地方定义视图,我想使用 SELECT * 创建代理视图。

我一直在寻找不这样做的原因,但没有找到。有人对使用 SELECT * 进行视图定义有意见吗?

sql-server view sql-server-2014

5
推荐指数
1
解决办法
5107
查看次数