Otázka:
Mám accessové databáze a tabulku SQL, která ukládá informace. V části Funkce propojeného serveru SQL 7.0 jsem SQL accessové databáze zobrazit jenom jako další SQL databáze. Také jsem napsal(a) uloženou proceduru, která kopíruje záznamy z accessové databáze do SQL tabulky. Spuštěná z ISQL/Query Analyzeru se uložená procedura spustí a funguje správně. Volání uložené procedury z dexterity vytvoří následující chybovou zprávu z SQL Server: Heterogenní dotazy vyžadují nastavení možností ANSI_NULLS a ANSI_WARNINGS pro
připojení. Tím zajistíte konzistentní sémantiku dotazů. Povolte tyto možnosti a pak dotaz znovu vysílte. Můžu dokonce spustit tuto uloženou proceduru z Dexterity?
Odpověď: Ano, ale budeme muset uloženou proceduru mírně
upravit. Důvodem SQL, proč se nepodaří, je, že aby bylo možné správně číst tabulky v aplikaci Dexterity, musí být tyto možnosti vypnuté, takže volání uložených procedur v aplikaci Dexterity tyto příkazy před spuštěním uložené procedury vyvolají. Uživatel musí zajistit, aby data, která porušují tato pravidla, nebyla do tabulky SQL nezadá. V následující ukázce je table_access přístupová tabulka. Tabulka table_test je SQL tabulka.
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
Uloženou proceduru můžeme upravit tak, aby se upozornění nastavila takhle:
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
V tomto případě uložená procedura dědí atributy toho, co ji volá. V takovém případě dexterity zavolá theaccess_tableprocedure, který zapne ANSI_NULLS & ANSI_WARNINGS a pak zavolá skutečnou uloženou proceduru a předá v našich parametrech.
Tento článek byl TechKnowledge Document ID:10011