Vraag:
Ik heb een Access DB en een SQL tabel met gegevens. Onder de Linked Server-functies van SQL 7.0 heb ik SQL Access DB als gewoon een andere database SQL zien. Ik heb ook een opgeslagen procedure geschreven die records kopieert van de Access DB naar de SQL tabel. De opgeslagen procedure wordt uitgevoerd vanuit ISQL/Query Analyzer en werkt correct. Als u de opgeslagen procedure belt vanuit Dexterity, wordt het volgende foutbericht van SQL Server weergegeven: Voor heterogene query's moeten de ANSI_NULLS- en ANSI_WARNINGS-opties voor de verbinding worden
ingesteld. Dit zorgt voor consistente query-semantiek. Schakel deze opties in en pas de query opnieuw uit. Kan ik deze opgeslagen procedure zelfs uitvoeren vanuit Dexterity?
Antwoord:
Ja, maar we moeten de opgeslagen procedure enigszins wijzigen. De reden waarom het mislukt, is dat als u SQL tabellen goed wilt lezen in Dexterity, deze opties moeten worden uitgeschakeld, zodat het bellen van opgeslagen procedures in Dexterity deze opdrachten uitstelt voordat u de opgeslagen procedure uitstelt. De gebruiker moet ervoor zorgen dat gegevens die in strijd zijn met deze regels, niet in de tabel SQL worden ingevoerd. In het onderstaande voorbeeld is de table_access de access-tabel. De table_test is de SQL tabel.
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
We kunnen de opgeslagen procedure wijzigen om onze waarschuwingen zo in te stellen:
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
In dit geval neemt de opgeslagen procedure de kenmerken over van wat deze procedure noemt. Voor deze situatie wordt dexterity theaccess_tableprocedure waarmee de ANSI_NULLS & ANSI_WARNINGS wordt in- en gebeld en vervolgens de echte opgeslagen procedure wordt aanroepen en in onze parameters wordt doorgeslagen.
Dit artikel was TechKnowledge Document ID:10011