Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Bug: Indexed view not updated on change base table  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Смысл: Данные в индексной вьюхе (индексе) не обновляется при изменении таблицы.

Внимание: в скрипте создание новой базы. (Не обязательно, можно на существующих, кроме tempdb).
+ Script
USE master
PRINT @@Version
GO
CREATE DATABASE [Test]					-- Set valid folder path
	ON PRIMARY	(NAME = N'Test_Data'	,FILENAME = N'Z:\Path\Test_Data.mdf')
	LOG ON		(NAME = N'Test_log'	,FILENAME = N'Z:\Path\Test_log.ldf')
GO
USE Test	-- Not use tempdb!
GO
CREATE TABLE [dbo].[TAddition] (
	 [ID]	Int	IDENTITY
	 CONSTRAINT [PK_TAddition]		PRIMARY KEY
	,[Data]	NVarChar(256)	    NULL
)
GO
CREATE TABLE [dbo].[TObjectAddition] (
	 [ID]		Int
	 CONSTRAINT [PK_TObjectAddition]		PRIMARY KEY
--	 CONSTRAINT [FK_TObjectAddition]		REFERENCES [dbo].[TObject]([ID])
	,[Addition]	Int	NOT NULL
	 CONSTRAINT [FK_TObjectAddition_Addition]	REFERENCES [dbo].[TAddition]([ID])
)
GO
CREATE VIEW [dbo].[VObjectAddition] WITH SCHEMABINDING AS
SELECT	 O.ID
	,O.Addition
	,A.Data
FROM	     dbo.TObjectAddition	O
	JOIN dbo.TAddition		A ON A.ID = O.Addition
GO
CREATE UNIQUE CLUSTERED INDEX [PK_VObjectAddition] ON [dbo].[VObjectAddition] ([ID])
GO
CREATE VIEW [dbo].[VObject] WITH SCHEMABINDING AS
SELECT	 O.ID
	,A.Addition
	,A.Data
FROM	          dbo.TObjectAddition	O	-- dbo.TAddition
	LEFT JOIN dbo.VObjectAddition	A WITH(NoExpand) ON A.ID = O.ID
GO
CREATE TRIGGER [dbo].[trVObject] ON [dbo].[VObject]
INSTEAD OF UPDATE AS BEGIN
	SET NOCOUNT ON

	IF Update(Data)
		MERGE	dbo.TAddition	T
		USING	Inserted	S ON T.ID = S.Addition
		WHEN     MATCHED		THEN UPDATE SET
			 Data			= S.Data
		WHEN NOT MATCHED BY TARGET	THEN
			INSERT(  Data)
			VALUES(S.Data);
END
GO
--------------------------------------------------------------------------------
SET IDENTITY_INSERT dbo.TAddition ON
INSERT	dbo.TAddition(ID,Data)
SELECT	A.Number,'Data ' + Convert(VarChar,A.Number)
FROM	master.dbo.spt_values	A
WHERE	A.[type] = 'P'
SET IDENTITY_INSERT dbo.TAddition OFF

INSERT	dbo.TObjectAddition(ID,Addition)
SELECT	A.Number,A.Number
FROM	master.dbo.spt_values	A
WHERE	A.[type] = 'P'

UPDATE	V
SET	Data = 'Changed data'
FROM	dbo.VObject V
WHERE	ID = 1

SELECT * FROM dbo.TAddition				WHERE ID = 1
SELECT * FROM dbo.VObjectAddition WITH(NoExpand)	WHERE ID = 1
GO
/*
DROP VIEW dbo.VObject
DROP VIEW dbo.VObjectAddition
DROP TABLE dbo.TObjectAddition
DROP TABLE dbo.TAddition
*/
GO
USE master
GO
DROP DATABASE [Test]
GO
Microsoft SQL Server 2008 (SP3) - 10.0.5512.0 (X64) 
Aug 22 2012 19:25:47
Copyright (c) 1988-2008 Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.0 <X64> (Build 6002: Service Pack 2)

В таблице видны новые данные.
IDData
1Changed data
Во вьюхе остались старые. Bug
IDAdditionData
11Data 1
NoExpand для гарантии что читается из индекса представления, а не базовой таблицы.

Пока непонятно, почему не воспроизводится на tempdb, но на других или новой без проблем.
Прошу протестировать на последних сборках новых версий (2008R2 и 2012).

PS: Если это баян, прошу скинуть ссылку.
15 ноя 12, 18:06    [13479930]     Ответить | Цитировать Сообщить модератору
 Re: Bug: Indexed view not updated on change base table  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2806.0 (X64)

повторяется
если в триггере весь MERGE сменить на простой UPDATE - все корректно
если в триггере из MERGE убрать "WHEN NOT MATCHED" - опять все корректно

очень похоже что таки бага в данной комбинации, MERGE криво запилен изначально..
15 ноя 12, 18:18    [13480006]     Ответить | Цитировать Сообщить модератору
 Re: Bug: Indexed view not updated on change base table  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 
Jun 17 2011 00:54:03
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

Воспроизводится.
15 ноя 12, 18:19    [13480016]     Ответить | Цитировать Сообщить модератору
 Re: Bug: Indexed view not updated on change base table  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Воспроизводится на

Microsoft SQL Server 2008 R2 (SP2) - 10.50.4263.0 (X64) 
Aug 23 2012 15:56:56
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

Microsoft SQL Server 2012 - 11.0.2332.0 (X64)
Aug 22 2012 17:05:49
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)
Oct 19 2012 13:38:57
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
15 ноя 12, 21:03    [13480692]     Ответить | Цитировать Сообщить модератору
 Re: Bug: Indexed view not updated on change base table  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
На R1 (5500 или как-то так -- сервера нет под рукой) тоже воспроизвелось.
15 ноя 12, 21:51    [13480799]     Ответить | Цитировать Сообщить модератору
 Re: Bug: Indexed view not updated on change base table  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Indexed view is not updated on data changes in base table

Ставим плюсы, комментируем.
16 ноя 12, 11:59    [13482807]     Ответить | Цитировать Сообщить модератору
 Re: Bug: Indexed view not updated on change base table  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Mnior,

+1
19 ноя 12, 21:56    [13497072]     Ответить | Цитировать Сообщить модератору
 Re: Bug: Indexed view not updated on change base table  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Mnior
Ставим плюсы, комментируем.


кто пример прогнал - может смело говорить, что у него также воспроизводится и жить мешает :)
20 ноя 12, 11:27    [13498952]     Ответить | Цитировать Сообщить модератору
 Re: Bug: Indexed view not updated on change base table  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Alexey by Microsoft on 12.12.2012 at 19:49
Hello,
Thanks for your time reporting the issue.
Please, note this problem is known and was actually fixed in SQL Server 2008 SP3 Cumulative Update 8 (see http://support.microsoft.com/kb/2756471).
The fix will also be available in SQL Server 2008 R2 SP1 Cumulative Update 10, SQL Server 2008 R2 SP2 Cumulative Update 4, SQL Server 2012 Cumulative Update 5 and SQL Server 2012 SP1 Cumulative Update 2 when they release.
I will be resolving the issue as a duplicate of a known hotfix.
14 дек 12, 16:03    [13632979]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить