我知道在 SQL Server 中,您可以在视图上创建索引,然后视图保存基础表中的数据。然后就可以查询视图了。但是,为什么我需要使用视图而不是表格?
我试图在Sql Server 2005中的视图上添加一个索引,我得到了这个错误:"无法在视图上创建索引'AllAssignmentNotes'因为视图不是模式绑定的."
我不想在这里提供太多信息,因为它可能超载.只是想知道是否有人可以给我一些帮助.
我去了错误给我的网址,让我无处可去.完整错误如下.
我知道你不能给出真正的答案,因为我没有给你所有的信息,我的道歉.
TITLE: Microsoft SQL Server Management Studio ------------------------------ Create failed for Index 'IX_AssignmentId'. (Microsoft.SqlServer.Smo) For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=9.00.4035.00&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Create+Index&LinkId=20476 ------------------------------ ADDITIONAL INFORMATION: An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo) ------------------------------ Cannot create index on view 'AllAssignmentNotes' because the view is not schema bound. (Microsoft SQL Server, Error: 1939) For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.4035&EvtSrc=MSSQLServer&EvtID=1939&LinkId=20476 ------------------------------ BUTTONS: OK ------------------------------
我使用以下代码创建了一个视图
CREATE VIEW dbo.two_weeks_performance WITH SCHEMABINDING
AS
SELECT dbo.day_dim.date_time AS Date,
dbo.order_dim.quantity AS Target_Acheived
FROM dbo.day_dim
JOIN dbo.order_fact ON dbo.day_dim.day_id = dbo.order_fact.day_id
JOIN dbo.branch_dim ON dbo.order_fact.branch_id = dbo.branch_dim.branch_id
JOIN dbo.order_dim ON dbo.order_fact.order_id = dbo.order_dim.order_id
GROUP BY dbo.order_dim.quantity, dbo.day_dim.date_time`
Run Code Online (Sandbox Code Playgroud)
现在我用的时候:
CREATE UNIQUE CLUSTERED INDEX two_weeks_performance_I ON two_weeks_performance (Date)
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
无法创建索引,因为其选择列表未使用正确的COUNT_BIG()用法.考虑将COUNT_BIG(*)添加到选择中.
请帮我解决这个问题.
有人告诉我,SQL Server 2005中有一个名为索引过滤器的新功能.
我想要做的是向列添加索引并使索引忽略空值.
我找不到关于此功能的好信息(可能是我的来源有误).有人可以提供有关此功能的其他信息吗?
与我之前关于没有临时孔的序列(保证读者可见的数字总是递增)的问题相关,请在此处输入链接描述,我想问一下我设计的解决方案是否有意义.
我创建了一个带有rowversion列的表.如果我理解正确,SQL Server保证值将始终递增.因为这只是一堆字节,所以查询WHERE RowVer > 1567会需要强制转换,因此会导致表扫描.
所以我创建了一个索引视图来执行转换,我正在查询视图.它在表面上运行(查询计划显示索引查找)但是我不确定如果我浏览索引,总是递增的保证是否仍然成立.请帮忙.
编辑
它似乎在调试时工作正常,但插入到我的表块阻止任何选择.需要调查正在持有哪种锁.
我意识到这是一个非常人为的例子,但我已将完整版简化为以下版本,以说明问题:
CREATE VIEW model.Appointments_Partition1
WITH SCHEMABINDING AS
SELECT CONVERT(varchar(15), AppointmentId) as Id,
ap.AppTypeId as AppointmentTypeId,
ap.Duration as DurationMinutes,
ap.AppointmentId as EncounterId,
COUNT_BIG(*) as __count_big
FROM dbo.Appointments ap
JOIN dbo.PracticeCodeTable pct ON SUBSTRING(pct.Code, 1, 1) = ap.ScheduleStatus
AND pct.ReferenceType = 'AppointmentStatus'
WHERE ap.AppTime > 0
GROUP BY CONVERT(varchar(15), AppointmentId), ap.AppTypeId, ap.Duration, ap.AppointmentId
CREATE UNIQUE CLUSTERED INDEX [IX_Appointments_Partition1_Id]
ON model.Appointments_Partition1 ([Id]);
Run Code Online (Sandbox Code Playgroud)
我明白了:
消息8668,级别16,状态0,行12
无法在视图'PracticeRepository.model.Appointments_Partition1'上创建聚簇索引'IX_Appointments_Partition1_Id',因为视图的选择列表包含有关聚合函数或分组列结果的表达式.考虑从聚合函数的结果中删除表达式或从选择列表中分组列.
我包括count_big ...那么为什么这个组出现问题?....我该如何解决这个错误?
我正在尝试创建索引视图,并在创建索引时遇到以下错误:
无法在视图....'上创建索引,因为WHERE或GROUP BY子句中视图引用的列'Amount'不精确。考虑从视图中删除该列,或者精确地更改该列。
有问题的列的数据类型是real我想出现的问题?
解决这个问题的合适方法是什么?我可以在视图SQL中进行转换以消除“不精确性”吗?
视图SQL在下面指定:
EXEC('
CREATE VIEW model.ReceivableBillableParties
WITH SCHEMABINDING
AS
SELECT pf.Id AS Id
, pf.InsuranceId AS InsuranceId
, pf.FinancialInsType AS InsuranceType
, pr.ReceivableId
FROM dbo.Receivables pr
INNER JOIN dbo.Demographics pd ON pd.PersonId = pr.PersonId
INNER JOIN dbo.Appointments ap ON ap.AppointmentId = pr.AppointmentId
INNER JOIN dbo.Financiasl pf ON pf.PersonId = pf.PersonId
INNER JOIN dbo.PracticeInsurers pri ON pri.InsurerId = pf.FinancialInsurerId
WHERE pri.Amount = 0
')
EXEC('
CREATE UNIQUE CLUSTERED INDEX [IX_ReceivableBillableParties]
ON model.ReceivableBillableParties ([Id]);
')
Run Code Online (Sandbox Code Playgroud) 我从2005年的文档中看到,您无法从Xml列创建索引视图.
这可能在2008年或2008年2月?我找不到任何文档说这是添加的东西,但我正在寻找确认,而且我目前还没有方便地访问2008环境.
编辑
我背后的动机是,Xml的数量正在增长到SSRS报告来自Xml的聚合数据变慢的程度.