问题
:我有一个 Access DB 和一SQL存储信息的表。 在 7.0 SQL的链接服务器功能下,我允许SQL Access DB 作为另一个 SQL 数据库。 我还会编写一个存储过程,用于将记录从 Access DB 复制到 SQL 表。 从 ISQL/Query Analyzer 运行,存储过程可正常运行。 从 Dexterity 调用存储过程会从 SQL Server 生成以下错误消息:异类查询需要为连接设置 ANSI_NULLS 和 ANSI_WARNINGS
选项。 这可确保一致的查询语义。 启用这些选项,然后重新启用查询。我甚至可以从 Dexterity 运行此存储过程吗?
答
:可以,但必须稍微修改存储过程。 失败的原因是为了在 Dexterity 中正确读取 SQL 表,必须将这些选项关闭,以便调用 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 文档 ID:10011