0
我試圖使用索引視圖進行行版本控制,按照其鍵和時間戳對記錄進行分組,並獲取最大(timestamp)記錄。這很好,但我使用過的查詢(請參見下面的視圖)進行了自連接,這意味着它不能用於索引視圖中,我認爲這對於性能至關重要。有沒有辦法重寫查詢,以便視圖可以成功創建WITH SCHEMABINDING?SQL GROUP BY:獲取索引視圖的最近更新記錄
我使用2005年,但2008年唯一的解決方案將罰款。
IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[Items]'))
DROP VIEW [dbo].[Items]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ItemHistory]') AND type in (N'U'))
DROP TABLE [dbo].[ItemHistory]
GO
CREATE TABLE [dbo].[ItemHistory](
[Key] [nchar](10) NOT NULL,
[Value] [int] NOT NULL,
[TimeStamp] Timestamp NOT NULL,
[LastUpdateBy] [varchar](50) NOT NULL CONSTRAINT [DF_ItemHistory_LastUpdateBy] DEFAULT (SUSER_NAME()),
[Deleted] BIT NOT NULL DEFAULT (0)
CONSTRAINT [PK_ItemHistory] PRIMARY KEY CLUSTERED
(
[Key] ASC,
[TimeStamp] ASC
) ON [PRIMARY]
)
GO
CREATE VIEW dbo.Items
--WITH SCHEMABINDING --doesnt work with the query below :(
AS
SELECT ih.[key], ih.[Value] FROM ItemHistory ih
INNER JOIN (
SELECT [Key], Max([TimeStamp]) [TimeStamp]
FROM ItemHistory
GROUP BY [Key]
) ih2 ON ih.[key] = ih2.[key] AND ih.[TimeStamp] = ih2.[TimeStamp] AND Deleted = 0
GO
INSERT INTO Items ([Key], [Value]) VALUES ('ItemA', 1)
INSERT INTO Items ([Key], [Value]) VALUES ('ItemA', 2)
INSERT INTO Items ([Key], [Value]) VALUES ('ItemA', 3)
GO
SELECT * FROM ItemHistory
SELECT * FROM Items
你先生,是一個天才。我先生,是個白癡。沒有正確閱讀創建消息。 將 SELECT IH。[鍵],1H。[值] FROM dbo.ItemHistory IH WHERE NOT EXISTS(SELECT TOP 1 [關鍵] FROM dbo.ItemHistory AS IH2 WHERE IH。[鍵] = IH2。[ [TimeStamp]
mcintyre321
2009-07-17 11:09:24