Otázka:
Mám accessový DB a tabuľku s SQL, v ktorých sú uvedené informácie. V rámci funkcií prepojeného servera vo SQL 7.0 sme povolili, aby SQL sa accessový DB mohol zobraziť len ako SQL databázy. Napísal/-a som aj uloženú procedúru, ktorá skopíruje záznamy z databázy DB Accessu do SQL databázy. Pri spustení z ISQL/Query Analyzer sa uložená procedúra spustí a funguje správne. Volaním uloženej procedúry z aplikácie Dexterity sa zobrazí nasledujúce chybové hlásenie od SQL Server: Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options
to be set for the connection. Zabezpečí sa tak konzistentná sémantika dotazu. Povoľte tieto možnosti a potom zadajte dotaz. Môžem túto uloženú procedúru spustiť aj z aplikácie Dexterity?
Odpoveď: Áno, ale uloženú procedúru
bude potrebné mierne upraviť. Dôvodom je, že ak chcete, aby sa SQL tabuľky v pohyblivosti čítali správne, tieto možnosti je potrebné vypnúť, aby sa tieto príkazy pred spustením uloženej procedúry mohli ukladať v prípade problémov s pohybom. Používateľ musí zabezpečiť, aby sa údaje, ktoré porušuje tieto pravidlá, nezaviedol do SQL pravidiel. Vo vzore nižšie je table_access tabuľka s prístupom. Tabuľka table_test je SQL tabuľky.
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ženú procedúru môžeme upraviť tak, aby sa naše upozornenia nastavili takto:
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 prípade uložená procedúra zdedí atribúty, ktoré ju vyvolá. V tejto situácii volá Dexterity theaccess_tableprocedure, ktorý zapne ANSI_NULLS & ANSI_WARNINGS a potom zavolá do skutočnej uloženej procedúry a prejde v našich parametroch.
Tento článok bol TechZnámená identifikácia dokumentu:10011