質問:
Access DB と、情報を格納SQLテーブルがあります。 SQL 7.0 のリンク サーバー機能では、SQL データベースの別のデータベースとして Access DB をSQLしました。 また、Access DB からテーブルにレコードをコピーするストアド プロシージャSQLしました。 ISQL/Query Analyzer から実行すると、ストアド プロシージャが実行され、正しく動作します。 Dexterity からストアド プロシージャを呼び出す場合、SQL Server から次のエラー メッセージが生成されます。異種クエリでは、接続に対して ANSI_NULLS オプションと ANSI_WARNINGS オプションを設定する
必要があります。 これにより、一貫性のあるクエリ セマンティクスが保証されます。 これらのオプションを有効にし、クエリを再発行します。Dexterity からこのストアド プロシージャを実行できますか。
回答:
はい。ただし、ストアド プロシージャを少し変更する必要があります。 失敗する理由は、dexterity で SQL テーブルを正しく読み取る場合、これらのオプションをオフにする必要があります。そのため、Dexterity のストアド プロシージャを呼び出すことによって、ストアド プロシージャを実行する前にこれらのコマンドが発行されます。 ユーザーは、これらのルールに違反するデータがテーブルに導入SQLがあります。 次の例では、table_accessテーブルを示します。 このtable_testテーブルSQLです。
if exists (select * from sysobjects where id =
object_id('dbo.access_update') and sysstat & 0xf = 4)
drop procedure dbo.access_update
GO
create procedure dbo.access_update @O_SQL_Error_State int = NULL output
as
INSERT INTO access_table ( DOCNUMBR, DOCAMNT )
SELECT access_test.DOCNUMBR, access_test.DOCAMNT
FROM access_test
GO
ストアド プロシージャを変更して、次のように警告を設定できます。
if exists (select * from sysobjects where id =
object_id('dbo.access_update') and sysstat & 0xf = 4)
drop procedure dbo.access_update
GO
create procedure dbo.access_update @O_SQL_Error_State int = NULL output
as
set ANSI_NULLS ON
SET ANSI_WARNINGS ON
exec access_table2 ( DOCNUMBR, DOCAMNT )
GO
この場合、ストアド プロシージャは、呼び出し元の属性を継承します。 このような場合、Dexterity は theaccess_tableprocedure を呼び出し、ANSI_NULLS & ANSI_WARNINGS をオンにし、実際のストアド プロシージャを呼び出してパラメーターを渡します。
この記事は TechKnowledge Document ID:10011 でした