Vprašanje: Imam Access DB in
tabelo SQL, ki shranjuje informacije. V razdelku s funkcijami povezanega strežnika SQL 7.0 sem SQL access DB videti kot le drugo SQL zbirko podatkov. Napisal sem tudi shranjeno proceduro, ki kopira zapise iz Accessove zbirke podatkov v SQL tabele. Ko se izvaja v analizatorju ISQL/poizvedbe, se shranjena procedura zažene in deluje pravilno. Če shranjeno proceduro pokličete s strani Dexterity, s tem kličejo SQL Server sporočilo o napaki: Pri heterogenih poizvedbah morate nastaviti možnosti ANSI_NULLS, ANSI_WARNINGS in ANSI_WARNINGS za
povezavo. S tem zagotovite dosledno semantika poizvedb. Omogočite te možnosti in nato znova izberite poizvedbo. Ali lahko to shranjeno proceduro zaženem tudi s strani Dexterity?
Odgovor:
Da, vendar bomo shranjeno proceduro morali nekoliko spremeniti. Razlog za neuspešen je v tem, da je treba te možnosti izklopiti, če želite pravilno brati tabele SQL v spretnostih, tako da klicanje shranjenih proceduro v spretnostih izda te ukaze, preden zaženete shranjeno proceduro. Uporabnik mora zagotoviti, da podatki, ki kršijo ta pravila, niso vneseni v SQL tabeli. V spodnjih vzorcih je table_access dostopna tabela. Polje table_test je SQL tabele.
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
Shranjeno proceduro lahko spremenimo tako, da nastavite naša opozorila tako:
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 tem primeru shranjena procedura podeduje atribute tega, kar jo imenuje. V tem primeru Dexterity pokliče theaccess_tableprocedure ki vklopi ANSI_NULLS & ANSI_WARNINGS in nato pokliče pravo shranjeno proceduro in poda naše parametre.
Ta članek je bil TechKnowledge DOCUMENT ID:10011