Pitanje:
imam bazu podataka programa Access i tablicu SQL koja pohranjuje podatke. U odjeljku Značajke servisa Linked Server SQL 7.0 dopustio sam SQL pristup bazi podataka kao samo SQL baze podataka. Napisao sam i spremljenu proceduru koja kopira zapise iz baze podataka programa Access u tablicu SQL. Pokrenut od ISQL/Query Analyzer, pohranjena procedura pokreće se i pravilno funkcionira. Pozivanje pohranjenog postupka iz spretnosti stvara sljedeću poruku o pogrešci iz programa SQL Server: Heterogeni upiti zahtijevaju postavljanje ANSI_NULLS i ANSI_WARNINGS mogućnosti
povezivanja. Time se osigurava dosljedna semantika upita. Omogućite te mogućnosti, a zatim ponovno omogućite upit. Mogu li čak pokrenuti ovaj pohranjeni postupak iz spretnosti?
Odgovor:
Da, ali morat ćemo malo izmijeniti pohranjeni postupak. Razlog zbog kojeg ne uspijeva jest to što se radi pravilnog čitanja SQL u spretnosti te mogućnosti moraju isključiti pa pozivanje pohranjenih postupaka u problemima spretnosti te naredbe prije pokretanja pohranjenog postupka. Korisnik mora osigurati da se podaci koji krše ta pravila ne uvode u SQL tablicu. U primjeru u nastavku table_access je pristupna tablica. Tablica table_test je SQL tablice.
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
Pohranjenu proceduru možemo izmijeniti da bismo na taj način postavili upozorenja:
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
U tom slučaju pohranjeni postupak nasljeđuje atribute naziva. U tom slučaju Spretnost poziva theaccess_tableprocedure uključuje ANSI_NULLS & ANSI_WARNINGS, a zatim poziva stvarnu pohranjenu proceduru i prelazi u naše parametre.
Ovaj je članak bio TECHKnowledge DOCUMENT ID:10011