سؤال: لدي Access DB SQL
جدول يخزن المعلومات. ضمن ميزات Linked Server SQL 7.0، لقد سمحت SQL Access DB على أنها مجرد قاعدة بيانات SQL أخرى. لقد كتبت أيضا إجراء مخزنا ينسخ السجلات من Access DB إلى SQL. يتم تشغيل الإجراء المخزن من ISQL/Query Analyzer ويعمل بشكل صحيح. يؤدي استدعاء الإجراء المخزن من Dexterity إلى الحصول على رسالة الخطأ التالية من SQL Server: تتطلب الاستعلامات غير المتجانسة تعيين ANSI_NULLS وخيارات ANSI_WARNINGS
للاتصال. يضمن ذلك دللالات الاستعلام المتناسقة. قم بتمكين هذه الخيارات ثم إعادة إصدار الاستعلام. هل يمكنني حتى تشغيل هذا الإجراء المخزن من Dexterity؟
الإجابة: نعم ولكن علينا تعديل الإجراء المخزن
قليلا. والسبب في فشله هو أنه لكي تتمكن من قراءة SQL الجداول بشكل صحيح في الواقع، يجب إيقاف تشغيل هذه الخيارات، لذا فإن استدعاء الإجراءات المخزنة في إدارة الأوامر يصدر هذه الأوامر قبل تشغيل الإجراء المخزن. يجب على المستخدم التأكد من عدم إدخال البيانات التي تنتهك هذه القواعد في SQL البيانات. في العينة أدناه، table_access جدول الوصول. إن table_test هو SQL الجدول.
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
يمكننا تعديل الإجراء المخزن لتعيين التحذيرات على كما يلي:
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
في هذه الحالة، يرث الإجراء المخزن سمات ما يسميه. في هذه الحالة، يستدعي theaccess_tableprocedure الذي ANSI_NULLS & ANSI_WARNINGS ثم يستدعي الإجراء والممرات المخزنة الحقيقية في معلماتنا.
كانت هذه المقالة TechKnowledge Document ID:10011