Въпрос:
Имам DB на Access и таблица с SQL, която съхранява информация. Под функциите на Свързания сървър на SQL 7.0 позволих на SQL да вижда базата данни на Access като просто друга SQL данни. Написах и съхранена процедура, която копира записите от DB на Access в таблицата SQL. Изпълнява се от ISQL/Query Analyzer, съхранената процедура се изпълнява и работи правилно. Обаждането на съхранената процедура от Dexterity създава следното съобщение за грешка от SQL Server:
Хетерогенните заявки изискват опциите за ANSI_NULLS и ANSI_WARNINGS да бъдат зададени за връзката. Това гарантира съгласувана семантика на заявките. Разрешете тези опции и след това преиздавайте заявката си. Мога ли дори да изпълнявам тази съхранена процедура от Dexterity?
Отговор:
Да, но ще трябва леко да променим съхранената процедура. Причината, поради която е неуспешно, е, че за да четете правилно таблиците на SQL в Dexterity, тези опции трябва да бъдат изключени, така че повикването на съхранени процедури в Dexterity да издава тези команди, преди да изпълните съхранената процедура. Потребителят трябва да се увери, че данните, които нарушават тези правила, не се въвеждат в 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
В този случай съхранената процедура наследява атрибутите на това, което го нарича. За тази ситуация Dexterity theaccess_tableprocedure, което включва ANSI_NULLS & ANSI_WARNINGS и след това извива реалната съхранена процедура и преминава в нашите параметри.
Тази статия е TechKnowledge Document ID:10011