Spørgsmål:
Jeg har en Access DB og en SQL, der lagrer oplysninger. Under linked server-funktionerne i SQL 7.0 har jeg tilladt SQL at se Access DB som en anden SQL-database. Jeg har også skrevet en gemt procedure, der kopierer poster fra Access DB til SQL tabel. Den lagrede procedure kører og fungerer korrekt, når den kører fra ISQL/Query Analyzer. Når du kalder den gemte procedure fra Dexterity, vises følgende fejlmeddelelse fra SQL Server: Heterogene forespørgsler kræver, at indstillingerne ANSI_NULLS og
ANSI_WARNINGS angives for forbindelsen. Dette sikrer ensartet forespørgselssemantik. Aktivér disse indstillinger, og affrys derefter forespørgslen igen. Kan jeg endda køre denne lagrede procedure fra Dexterity?
Svar:
Ja, men vi er nødt til at ændre den lagrede procedure en smule. Problemet skyldes, at for at kunne læse SQL tabeller korrekt i Dexterity skal disse indstillinger være slået fra, så opkald med lagrede procedurer i Dexterity udsteder disse kommandoer, før du kører den lagrede procedure. Brugeren skal sørge for, at data, der overtræder disse regler, ikke introduceres i SQL tabel. I eksemplet nedenfor er table_access adgangstabellen. Tabellen table_test den 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
Vi kan ændre den lagrede procedure for at indstille vores advarsler på denne måde:
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
I dette tilfælde nedarver den lagrede procedure attributterne for det, der kalder den. I denne situation ringer Dexterity til theaccess_tableprocedure, der slår skærmen ANSI_NULLS & ANSI_WARNINGS og derefter kalder den rigtige gemte procedure og passerer i vores parametre.
Denne artikel var TechKendt dokument-id:10011