【发布时间】:2014-06-30 22:24:43
【问题描述】:
我创建了一个连接表的视图,并在该视图上创建了一个聚集索引,这样我就可以从多个表中对我需要的所有数据进行全文搜索。它工作得很好,但我无法在具有唯一索引'IX_vPRs'的对象'dbo.vPRs'中插入重复的键行。重复键值为 (47)。此语句在 proc 中运行时出错:
UPDATE prHdr
SET PRStatus=3
WHERE PrId=@prId
我不明白为什么更新语句会在视图中插入一行(正如错误所解释的那样)。
有什么想法吗?
定义:
CREATE VIEW [dbo].[vPRs]
WITH SCHEMABINDING
AS
SELECT a.PrSeriesId,
DivisionId [Division],
DateStart,
DateEnd,
Showroom,
VendorId,
VendName,
PlmVendorId,
b.Style,
e.Description [Status],
f.FullName Requester,
COUNT_BIG(*)AS countbig
FROM [dbo].[PrHdr] a
JOIN [dbo].[PrDtl] b ON a.prId=b.prId
JOIN dbo.PrSeries p ON a.PrSeriesId=p.PrSeriesId
JOIN [dbo].[PrStatus] e on a.PrStatusId = e.PrStatusId
JOIN [dbo].[User] f on p.UserCreate=f.UserName
GROUP BY a.PrSeriesId,
DivisionId,
DateStart,
DateEnd,
Showroom,
VendorId,
VendName,
PlmVendorId,
b.Style,
e.Description,
f.FullName
GO
/****** Object: Index [IX_vPRs] Script Date: 6/30/2014 10:45:49 PM ******/
CREATE UNIQUE CLUSTERED INDEX [IX_vPRs] ON [dbo].[vPRs]
(
[PrSeriesId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
【问题讨论】:
-
那么视图的定义是什么?包括索引?更改连接中涉及的列的值肯定会导致将行添加到连接结果中。
-
我用定义编辑了 OP
-
@MartinSmith 你开始让我想到加入。由于我正在更新状态列并且该状态列正在连接中使用,因此该更改将导致视图查询中的另一行,因为它与其他相关行不同。所以我添加了行 ID 来查看并将其用于索引。看来我可以走了。
标签: sql-server sql-server-2012