Запитання.
У мене є бази даних Access і таблиця SQL, у яких зберігаються відомості. Відповідно до функцій зв'язаного сервера SQL 7.0 мені дозволено переглядати базу даних Access SQL базу даних Access як ще одну базу SQL даних. Збережену процедуру копіює записи з бази даних Access до SQL таблиці. Запущено з ISQL/Query Analyzer, збережена процедура виконується та працює належним чином. Під час виклику збереженої процедури з рухливості з'являється таке повідомлення про помилку SQL Server: Для гетерогенних запитів потрібно встановити параметри ANSI_NULLS і ANSI_WARNINGS для
підключення. Це забезпечить узгоджену семантику запитів. Увімкніть ці параметри, а потім повторіть виконання запиту. Чи можна запустити збережену процедуру з орудливості?
Відповідь. Так, але вам доведеться трохи змінити
збережену процедуру. Невдала причина полягає в тому, що для належного читання 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