[FIX] インデックス付きビューのベーステーブルの変更でエラー 8624

文書翻訳 文書翻訳
文書番号: 288174 - 対象製品
この記事は、以前は次の ID で公開されていました: JP288174
すべて展開する | すべて折りたたむ

現象

SQL Server のレコードを削除または更新すると、次のような内部エラーが発生することがあります。
サーバー : メッセージ 8624、レベル 16、状態 1、行 1
Internal SQL Server error.
クライアントにはエラー メッセージが返されますが、SQL Server のエラー ログにはエラー メッセージやアクセス違反についての情報は書き込まれません。レコードの削除や更新も行われません。

原因

このエラーは、インデックス付きのビューのメンバ テーブルが更新または削除され、そのテーブルと、ビュー内のほかのテーブルの間に DRI CASCADE 制約がある場合にのみ発生します。テーブルが、連鎖削除制約または連鎖更新制約付きで定義されていないか確認してください。その後、そのテーブルに依存しているインデックス付きのビューがないか確認してください。

解決方法

この問題を解決するために、SQL Server 2000 の最新の Service Pack の適用をお願いいたします。
最新の SQL Server サービスパックのダウンロードおよびインストールについて詳しくは以下をご覧下さい。

http://www.microsoft.com/japan/sql/download/default.asp (日本語版)
http://www.microsoft.com/sql/downloads/default.htm(英語版)

回避策

この問題を回避するには、DRI CASCADE 制約またはビューのインデックスを削除します。

状況

弊社では、これを Microsoft SQL Server version 2000 の問題として確認しています。
この問題は、Microsoft SQL Server version 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

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 288174 (最終更新日 2001-06-13) をもとに作成したものです。

プロパティ

文書番号: 288174 - 最終更新日: 2003年11月12日 - リビジョン: 2.1
この資料は以下の製品について記述したものです。
  • Microsoft SQL Server 2000 Standard Edition
キーワード:?
_ik kbbug kbfix kbsqlserv2000bug kbsqlserv2000sp1fix KB288174
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

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