Pertanyaan:
Saya memiliki Access DB dan tabel SQL yang menyimpan informasi. Di bawah fitur Server yang Ditautkan SQL 7.0, saya telah memperbolehkan SQL untuk melihat Access DB sebagai database SQL lain. Saya juga telah menulis prosedur yang disimpan yang menyalin rekaman dari Access DB ke SQL tabel. Berjalan dari ISQL/Query Analyzer, prosedur yang disimpan berjalan dan berfungsi dengan benar. Memanggil prosedur yang disimpan dari Dexterity akan menghasilkan pesan kesalahan berikut dari SQL Server: Kueri Heterogen memerlukan opsi ANSI_NULLS dan ANSI_WARNINGS yang dapat disetel untuk
sambungan. Ini memastikan semantik kueri yang konsisten. Enable these options and then reissue your query. Bisakah saya bahkan menjalankan prosedur yang disimpan ini dari Keterkasan?
Jawaban:
Ya, tetapi kami harus sedikit mengubah prosedur yang disimpan. Alasannya gagal adalah bahwa untuk membaca SQL tabel dengan benar dalam Keterbacaan, opsi tersebut harus dinonaktifkan sehingga memanggil prosedur yang disimpan dalam masalah Keterbacaan perintah tersebut sebelum menjalankan prosedur yang disimpan. Pengguna harus memastikan data yang melanggar aturan ini tidak dimasukkan ke dalam SQL tabel. Dalam contoh di bawah ini, table_access berikut adalah tabel access. Tabel table_test adalah SQL tabel.
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
Kami dapat mengubah prosedur yang disimpan untuk mengatur peringatan seperti ini:
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
Dalam kasus ini, prosedur yang disimpan mewarisi atribut yang memanggilnya. Untuk situasi ini, Dexterity theaccess_tableprocedure panggilan yang akan menyalakan ANSI_NULLS & ANSI_WARNINGS lalu memanggil prosedur yang sebenarnya disimpan dan melewati parameter kami.
Artikel ini adalah TechKnowledge Document ID:10011