Domanda: Ho un database di Access e una tabella SQL
in cui sono archiviate le informazioni. Nelle caratteristiche di Linked Server di SQL 7.0, ho consentito a SQL di vedere il database di Access come un altro database SQL database. È stata anche scritta una stored procedure che copia i record dal database di Access alla SQL tabella. In esecuzione da ISQL/Query Analyzer, la stored procedure viene eseguita e funziona correttamente. La chiamata della stored procedure da Dexterity genera il messaggio di errore seguente da SQL Server: Le query eterogenee richiedono l'impostazione delle opzioni ANSI_NULLS e ANSI_WARNINGS per
la connessione. In questo modo si garantisce una semantica delle query coerente. Abilitare queste opzioni e quindi riemettere la query. È anche possibile eseguire questa stored procedure da Dexterity?
Risposta:
Sì, ma sarà necessario modificare leggermente la stored procedure. Il motivo per cui non riesce è che per leggere correttamente le tabelle di SQL in Dexterity, queste opzioni devono essere disattivate in modo che la chiamata alle stored procedure in Dexterity esegni questi comandi prima di eseguire la stored procedure. L'utente deve assicurarsi che i dati che violano queste regole non siano introdotti nella SQL tabella. Nell'esempio seguente l'table_access è la tabella di Access. La table_test è la SQL tabella.
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
È possibile modificare la stored procedure per impostare gli avvisi in questo modo:
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 questo caso, la stored procedure eredita gli attributi di ciò che la chiama. In questo caso, Dexterity chiama theaccess_tableprocedure che attiva il ANSI_NULLS & ANSI_WARNINGS quindi chiama la stored procedure reale e passa i parametri.
Questo articolo è stato ID documento TechKnowledge:10011