FIX: 修改一個資料表的索引檢視表涉及的 DRI 串接式可能會造成 msg 8624

文章翻譯 文章翻譯
文章編號: 288174 - 檢視此文章適用的產品。
BUG #: 350912 (SHILOH_bugs)
全部展開 | 全部摺疊

徵狀

當使用者刪除或更新資料錄在 SQL Server 時, 可能會引發一個內部錯誤:
伺服器: 訊息 8624、 層級 16,狀態 1、 第 1 行
內部的 SQL Server 時發生錯誤。
錯誤訊息傳回至用戶端。沒有錯誤訊息或存取違規的資訊會寫入 SQL Server 錯誤記錄檔。資料錄不會刪除或更新。

發生的原因

當更新或刪除索引檢視表的一個成員資料表並且沒有該資料表與檢視中的其他資料表之間的 DRI CASCADE 條件約束時,只會發生此錯誤。檢查看看是否以階層式的刪除或更新條件約束定義之資料表。然後檢查是否具有取決於該資料表的索引檢視表。

解決方案

如果要解決這個問題,取得最新的 Service Pack,SQL Server 2000。如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
290211INF: 如何取得最新的 SQL Server 2000 Service Pack

其他可行方案

若要解決這個問題,移除 DRI CASCADE 條件約束或索引檢視表。

狀況說明

Microsoft 已確認這是在 SQL Server 2000 中的問題。這個問題已經先在 SQL Server 2000 Service Pack 1 中獲得修正。

其他相關資訊

若要重現這個問題,執行下列指令碼:
set ansi_nulls on
set ansi_padding on
set ansi_warnings on
set arithabort on
set concat_null_yields_null on
set quoted_identifier on
set numeric_roundabort off
go

CREATE TABLE [dbo].[adults] (
	[AdultId] [int] NOT NULL ,
	[FName] [varchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
	[LName] [varchar] (25) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[kids] (
	[AdultId] [int] NOT NULL ,
	[KidId] [int] NOT NULL ,
	[FName] [varchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
	[LName] [varchar] (25) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[adults] WITH NOCHECK ADD 
	CONSTRAINT [PK_adults] PRIMARY KEY  CLUSTERED 
	(
		[AdultId]
	)  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[kids] ADD 
	CONSTRAINT [FK_kids_adults] FOREIGN KEY 
	(
		[AdultId]
	) REFERENCES [dbo].[adults] (
		[AdultId]
	) ON DELETE CASCADE  ON UPDATE CASCADE 
GO



SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

/****** Object:  View dbo.v_AdultsWithKids    Script Date: 1/2/01 4:30:41 AM ******/ 

create view dbo.v_AdultsWithKids
with schemabinding
as

select a.adultid, a.fname as 'Adult First Name', a.lname as 'Adult Last Name', k.kidid, k.fname as 'Kid First Name', k.lname as 'Kid Last Name'
from dbo.adults a inner join dbo.kids k 
on a.adultid = k.adultid

GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO


set ANSI_PADDING,ANSI_WARNINGS,CONCAT_NULL_YIELDS_NULL,ARITHABORT,QUOTED_IDENTIFIER,ANSI_NULLS on 
GO

set NUMERIC_ROUNDABORT off 
GO

 CREATE  UNIQUE  CLUSTERED  INDEX [iv_cl_kidid] ON [dbo].[v_AdultsWithKids]([kidid]) ON [PRIMARY]
GO

insert into adults values (1, 'Bob', 'Johnson')
insert into kids values (1, 1, 'Joe', 'Johnson')
insert into kids values (1, 2, 'Jack', 'Johnson')
insert into kids values (1, 3, 'June', 'Johnson')

insert into adults values (2, 'Mary', 'Thomas')
insert into kids values (2, 4, 'John', 'Thomas')

insert into adults values (3, 'Susan', 'Sist')
go

delete from adults where adultid = 2
go

set NUMERIC_ROUNDABORT off set arithabort  OFF 
GO

SET QUOTED_IDENTIFIER OFF 
 
SET ANSI_NULLS ON 
GO
				

屬性

文章編號: 288174 - 上次校閱: 2003年11月6日 - 版次: 3.2
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2000 Standard Edition
關鍵字:?
kbmt kbbug kbfix kbsqlserv2000sp1fix KB288174 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:288174
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com