Frage:
Ich habe eine Access DB und eine SQL, in der Informationen gespeichert werden. Unter den Linked Server-Features von SQL 7.0 habe ich zugelassen, dass SQL Access DB nur als eine andere Datenbank SQL kann. Außerdem habe ich eine gespeicherte Prozedur geschrieben, mit der Datensätze aus Access DB in die Tabelle SQL werden. Wird von ISQL/Query Analyzer ausgeführt, wird die gespeicherte Prozedur ausgeführt und funktioniert ordnungsgemäß. Das Aufrufen der gespeicherten Prozedur über Dexterity führt zu der folgenden Fehlermeldung von SQL Server: Für heterogene Abfragen müssen die ANSI_NULLS- und ANSI_WARNINGS-Optionen für die Verbindung
festgelegt werden. Dadurch wird eine konsistente Abfragesemantik sichergestellt. Aktivieren Sie diese Optionen, und wählen Sie dann Ihre Abfrage aus. Kann ich diese gespeicherte Prozedur sogar über Dexterity ausführen?
Antwort:
Ja, aber wir müssen die gespeicherte Prozedur geringfügig ändern. Der Grund dafür ist, dass diese Optionen deaktiviert werden müssen, damit SQL-Tabellen ordnungsgemäß in Dexterity gelesen werden können, sodass der Aufruf von gespeicherten Prozeduren in Dexterity diese Befehle vor dem Ausführen der gespeicherten Prozedur ausstellt. Der Benutzer muss sicherstellen, dass Daten, die gegen diese Regeln verstoßen, nicht in die Tabelle SQL werden. Im folgenden Beispiel ist die table_access die Access-Tabelle. Die table_test ist die SQL Tabelle.
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
Wir können die gespeicherte Prozedur ändern, um unsere Warnungen wie hier zu ändern:
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 diesem Fall erbt die gespeicherte Prozedur die Attribute des -Aufrufs. In diesem Fall ruft Dexterity theaccess_tableprocedure auf, wodurch das -ANSI_NULLS & ANSI_WARNINGS aktiviert wird, anschließend die echte gespeicherte Prozedur aufruft und die Parameter übergibt.
Dieser Artikel wurde unter TechKnownow document ID:10011 (Dokument-ID:10011) behandelt.