/****** Object: Table [dbo].[cg_LimitDetail] Script Date: 2008-9-21 19:59:34 ******/ if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[cg_LimitDetail]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[cg_LimitDetail] GO
exec sp_executesql N'UPDATE "dbo"."cg_LimitDetail" SET "LimitConst"=@P1 WHERE "id" = @P2 AND "LimitGroupId" = @P3 AND "LimitConst" IS NULL AND "LimitValue" = @P4', N'@P1 nvarchar(50),@P2 int,@P3 int,@P4 bit', N'33', 3, 2, 0
大家看到,最后一个参数 @P4 竟然是 0 ,但是实际上在 SQL SERVER 中是 Null 。
终于找到问题了,要解决这个问题可以直接在 SQL SERVER 设计表时直接指定 BIT 字段的默认值为 0。 ACCESS中与SQL SERVER中数据类型不同,有些数据类型在链接表时ACCESS无法自动识别进行转换,也不提示有用的错误信息,所以应该算是个BUG吧。在这种环境下尽量使用不要转换的数据类型,比如长整、双精度之类的数据类型。