Questions tagged «view»

一种虚拟表,以一种替代方式表示一个或多个表中的数据。

5
我如何更快地查询这2000万条记录视图?
对于搜索功能,我正在使用一个视图,该视图具有需要搜索的所有表中的记录。该视图有近2000万条记录。针对该视图的搜索花费了太多时间。 我应该在哪里寻求改善这种观点的表现? 该视图的大致定义如下。它包括十三张桌子和大约三十个字段。 CREATE VIEW [dbo].[v_AllForSearch] AS SELECT FT.firstField AS [firstField] , FT.fld_primary AS [fld_primary] , FT.fld_thirdField AS [thirdField] , FT.fld_fourthField AS [fourthField] , ISNULL(ST.[fld_firstSearchField],'') AS [firstSearchField] , ISNULL(TT.[fld_thirdSearch],'') AS thirdSearch , ISNULL(TT.[fld_fourthSearch],'')AS fourthSearch , ISNULL(TT.[fld_fifthSearch],'')AS fifthSearch , ISNULL(FRT.[fld_sixthSearch],'') As [sixthSearch] , ISNULL(FRT.[fld_seventhSearch],'') AS [seventhSearch] , ISNULL(FRT.[fld_eightSearch],'')AS [eightSearch] , ISNULL(FIT.[fld_nineSearch],'') …

2
如何添加有权访问单个视图的用户?
我正在使用MSSQL Server Management Studio 2008,并且需要向第三方公开其数据协调的视图。我已经创建了适当的视图,但是在创建用户和授予该用户适当的权限以从视图中选择时遇到了麻烦。 我遵循了用于创建登录名和用户的向导,然后在“安全性”部分中添加了我的视图,并选中了“授予”框。一切似乎都很好,但是当我以该用户身份登录并尝试执行“从MyViewName中选择*”时,它告诉我选择权限被拒绝。 我只是重新创建了用户(这次只是使用SQL而不是向导),并明确授予了选择权限,现在它给了我错误:(Msg 916, Level 14, State 1, Line 2 The server principal "username" is not able to access the database "unrelated_db" under the current security context.我不知道为什么它试图访问不相关的数据库...) 我真的不知道从这里去哪里。同样,基本上,我所需要做的就是创建一个我可以提供给第三方的用户,以使他们连接到我们的数据库并从该视图中进行选择。


3
视图中ORDER BY子句的替代方案是什么?
这个问题只需要在此站点中即可:) 据我了解,ORDER BY被禁止在视图中使用,因为使用此视图时可能会进行多个排序。 我知道有很多方法可以绕过此限制,例如TOP 99.999999 PERCENT,但是我想知道什么是最佳实践,而不是如何破解它。 因此,如果我想在数据库中创建供个人使用的视图,这意味着我想连接到数据库并仅查看固定和排序的数据,如果无法订购视图,该怎么办? 当前在我的SQL Server数据库中,我有关于该TOPhack的视图,并且我经常使用它们,但是感觉不对。


5
为什么此UPDATE会因唯一的键约束冲突而失败?
我是一个“偶然的” DBA,相对缺乏经验并且对此问题感到困惑。 运行MS SQL Server2012。问题在于此UPDATE语句: UPDATE dbo.tAccts SET Ticket = 'ARP.ExGE' , Method = 'smtp' , AcctOwner = 'r00417819' , DisplayName = '~AppLight HBSFax-Inactive' , Destination = 'r00417819@mail.ad.ge.com' , UpdatedBy = SYSTEM_USER , UpdatedOn = CAST(GetDate() AS DATE) FROM dbo.vReclaimable WHERE OHR_EmpStatus <> 'A' 哪个应该只更新vReclaimable视图返回的tAccts表中的行。 vReclaimable视图基于tAccts表,并返回tAccts中的行的子集。 当我运行它时,它会失败并出现一个唯一的关键错误: (0 row(s) affected) …

1
非企业版和性能的noexpand提示
我必须使用索引视图才能达到性能。从该比较表中可以看出,标准版不支持索引视图。但是BOL说: 可以在任何版本的SQL Server中创建索引视图。在SQL Server Enterprise中,查询优化器会自动考虑索引视图。要在所有其他版本中使用索引视图,必须使用NOEXPAND表提示。 这样行得通吗(我在说性能) select * from dbo.OrderTotals with (noexpand, index=IXCU_OrderTotals) 在SQL Server Standard Edition上正常运行 select * from dbo.OrderTotals 对企业一? 这是查看代码: CREATE VIEW dbo.OrderTotals WITH SCHEMABINDING AS select OrderId = r.OrderId , TotalQty = SUM(r.Quantity) , TotalGrossConsid = SUM(r.Price * r.Quantity) , XCount = COUNT_BIG(*) from dbo.Order r …

2
通过PostgreSQL中的视图和触发器跟踪当前用户
我有一个PostgreSQL(9.4)数据库,该数据库根据当前用户限制对记录的访问,并跟踪用户所做的更改。这是通过视图和触发器实现的,并且在大多数情况下都可以正常工作,但是我在需要INSTEAD OF触发器的视图中遇到了问题。我试图减少问题的发生,但是我很抱歉这仍然很长。 情况 与数据库的所有连接都是通过Web前端通过单个帐户进行的dbweb。连接后,通过SET ROLE使用Web界面更改角色以使其与该人相对应,并且所有这些角色都属于组角色dbuser。(有关详细信息,请参见此答案)。假设用户为alice。 我的大多数表都放在一个架构中,在这里我将对其进行调用private并属于dbowner。这些表不能直接访问dbuser,但可以用作另一个角色dbview。例如: SET SESSION AUTHORIZATION dbowner; CREATE TABLE private.incident ( incident_id serial PRIMARY KEY, incident_name character varying NOT NULL, incident_owner character varying NOT NULL ); GRANT ALL ON TABLE private.incident TO dbview; 特定行对当前用户的可用性alice由其他视图确定。一个简化的示例(可以减少,但需要通过这种方式来支持更一般的情况)将是: -- Simplified case, but in principle could join multiple tables to determine allowed …

3
Oracle:如何查询层次表?
背景 这是为了构造一些我们将用于报告的视图。 我有一张位置表,关键字段是“ location”和“ parent”。 这两个字段在层次上创建的结构与公司名称->校园名称->建筑物名称->楼层名称->房间名称相似。在这种情况下,公司名称保持不变,园区名称保持不变。 位置的结构通常如下所示: +-----------+ | Org. Name | +-----+-----+ | +-----v-----+ +--------------------+|Campus Name|+---+--+-------------+ | +--+--------+ | | | | | | | | | | +--+-----+ +------+-+ +--+----+ +---+---+ +--+| BLDG-01|+--+ | BLDG-02| |BLDG-03| |Grounds| | +--------+ | +--------+ +-------+ +-------+ +-+------+ +-----+--+ |Floor-01| |Basement+-------+ +-+------+ …
10 oracle  query  view  hierarchy 

2
当从带有外部参数化“ where”子句的视图中调用时,窗口函数会导致糟糕的执行计划
很久以前,我遇到了这个问题,我找到了适合自己的解决方法,却忘了它。 但是现在在SO上存在这个问题,所以我愿意提出这个问题。 有一个视图以非常简单的方式(订单+订单行)连接了几个表。 当查询不带where子句的视图时,该视图将返回几百万行。 但是,没有人会这样称呼它。通常的查询是 select * from that_nasty_view where order_number = 123456; 这将返回5m中的10条记录。 重要的是:该视图包含一个窗口函数,该窗口函数rank()完全由始终查询该视图的字段划分: rank() over (partition by order_number order by detail_line_number) 现在,如果使用查询字符串中的文字参数查询此视图(完全如上所示),它将立即返回行。执行计划很好: 使用on的索引在两个表上进行索引查找order_number(返回10行)。 在返回的微小结果上计算窗口。 选择。 但是,当以参数化方式调用视图时,情况会变得很糟: Index scan在所有表上忽略索引。返回5m行。 巨大的加入。 计算所有partitions上的窗口(约50万个窗口)。 Filter 从5m中取出10行。 选择 在涉及参数的所有情况下都会发生这种情况。可以是SSMS: declare @order_number int = 123456; select * from that_nasty_view where order_number = @order_number; 它可以是ODBC客户端,例如Excel: …


1
PostgreSQL:从视图中删除列
我VIEW正在尝试为其创建演化脚本的位置,因此可以在其中添加一列。那部分工作正常;列添加就好了。但是,相反的方法无效。删除最后添加的列失败并显示一条ERROR: cannot drop columns from view消息。问题在于,这个特定的视图有很多引用,包括从和到的引用,因此,我不能只是DROP CASCADE一个令人毛骨悚然的东西! 为什么无法从给定中删除新添加的列VIEW?然后,我该怎么做才能完成此任务? (注意:这里是实际情况,但在许多其他情况下,我也很可能会看到类似的情况,也就是从视图中删除列。)

1
在数据库项目中将链接服务器与OPENQUERY一起使用
我有一个SQL Server 2008,运行一个我想放入TFS的数据库。因此,我在导入数据库的地方使用了Visual Studio 2013数据库项目。修复了一堆错误之后,我只剩下一个错误: 在一个视图中,开发人员用来OPENQUERY访问链接服务器。因此,我导入了包含正确数据库的DACPAC,并Add Database Reference使用以下参考选项将其添加到项目中。 初始脚本版本 这是原始视图创建的简短版本: CREATE VIEW dbo.vwStatus AS SELECT StatusID, StatusName FROM OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1 这导致以下错误: 错误136 SQL71501:视图:[dbo]。[vwStatus]具有对对象[LinkedServer]的未解析的引用。 第一次尝试 所以我试图插入服务器名称变量 FROM OPENQUERY($(LinkedServer), 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1 这导致 错误176 SQL46010:$(LinkedServer)附近的语法不正确。 进一步尝试 我摆弄了arround并尝试了以下操作(启用和不启用引用标识符): FROM OPENQUERY("$(LinkedServer)", 'SELECT * FROM [DB].[dbo].tbStatus') AS …


2
视图是否需要自己的外键约束?
免责声明:我是程序员,而不是DBA,所以请耐心等待... 我有一种观点,我只是将2个实体映射在一起。我必须在几个不同的表之间进行联接才能得到: CREATE OR REPLACE VIEW V_SCREENING_GROUP_SITES AS ( SELECT SG.SCREENING_GROUP_ID, V.SITE_ID FROM SCREENING_GROUP SG, VISIT V, VISIT_DATE VD WHERE VD.VISIT_ID = V.VISIT_ID AND V.SCREENING_GROUP_ID = SG.SCREENING_GROUP_ID); 以上仅是上下文,请不要为此担心太多。我需要知道的是如何使新的V_SCREENING_GROUP_SITES视图中的字段(SCREENING_GROUP_ID和SITE_ID)充当SCREENING_GROUP和SITE表的外键。还是有关系吗? 如果是一张桌子,我会做: ALTER TABLE V_SCREENING_GROUP_SITES ADD CONSTRAINT FK_SCREENING_GROUP_ID FOREIGN KEY (SCREENING_GROUP_ID) REFERENCES SCREENING_GROUP.SCREENING_GROUP_ID; ... 但是,由于这种观点显然行不通。我找不到可用于设置FK的ALTER VIEW语法。我该怎么办? (这是一个MySQL数据库)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.