- - PR -
SQLServer2000 計算列のIndexについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-11-07 13:46
お世話になっております。
開発環境 WindowsXPPro SQLServer2000 VS2003 VB.NET SQLServer2000において、 テーブル Create TableA( [Code] [decimal](8, 0) NOT NULL , [calc_親Code] AS (floor(([Code] / 1000))) ) ON [PRIMARY] を作成(実際はもっと列があるのですが簡略化しています)し、 このテーブルの計算列にIndexを 以下のように作成しました。 SET ARITHABORT ON GO SET CONCAT_NULL_YIELDS_NULL ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO SET ANSI_PADDING ON GO SET ANSI_WARNINGS ON GO SET NUMERIC_ROUNDABORT OFF GO CREATE INDEX [IX_Calc] ON [dbo].[TableA]([calc_親Code]) ON [PRIMARY] set arithabort OFF GO set numeric_roundabort OFF GO set quoted_identifier OFF GO SET ANSI_NULLS ON GO Deleteのみを行うストアドプロシージャ SET ARITHABORT ON GO SET CONCAT_NULL_YIELDS_NULL ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO SET ANSI_PADDING ON GO SET ANSI_WARNINGS ON GO SET NUMERIC_ROUNDABORT OFF GO CREATE PROCEDURE Proc_Delete @DelCode as decimal AS BEGIN Delete from TableA Where Code=@DelCode END set arithabort OFF GO set numeric_roundabort OFF GO set quoted_identifier OFF GO SET ANSI_NULLS ON GO を作成し、 VS2003のSQLCommandでこのストアドを実行すると、 SQLエラーとなり以下のようなメッセージが返されます。 『DELETE に失敗しました。次の SET オプションが無効な設定を持っています: 'ARITHABORT'』 同様にInsert・UpDateでもエラーとなります。 上記エラーとならないようにはどのようにすればよいのでしょうか? ご教授よろしく御願い申し上げます。 | ||||
|
投稿日時: 2007-11-07 17:01
CREATE PROCEDUREの内側、deleteの前で SET ARITHABORT ON してみてはいかがでしょうか。
| ||||
|
投稿日時: 2007-11-07 17:37
かめたろ様
ご回答ありがとう御座います。 CREATE PROCEDUREの内側、deleteの前で SET ARITHABORT ON を試してみましたが、やはり同様のエラーとなってしまいました。 | ||||
|
投稿日時: 2007-11-08 11:17
失礼しました。試してみてうまくいかないことを確認しました。ストアドの中でオプションを設定すれば有効になると思っていたのですが、そうではないオプションもあるようですね。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/tsqlref/ts_set-set_40c4.asp こちらを見る限りでは、ARITHABORTもストアド内で設定可能かなと思ったのですが・・・。 サーバレベル、データベースレベルまたはコネクションレベルの任意のレベルでARITHABORTをONに設定する必要があるようです。 一応、SqlClientを使用してコネクションレベルでのARITHABORTの設定を試しましたのでコードを載せておきます。
|
1