源表 TEST(摘录)。括号中的值确定日期类型:
ID (integer) | SAMPLES (double precision) | NSAMPLES (double precision)
------------------------------------------------------------------------------
575 10.000000 10.000000
有问题的 SQL 命令是这样的:
insert into TEST
select * from TEST where ID=575;
如果我从开源工具 FlameRobin 的命令行执行此命令
更新后的表格如下所示
ID (integer) | SAMPLES (double precision) | NSAMPLES (double precision)
------------------------------------------------------------------------------
575 10.000000 10.000000
810 10.000000 10.000000
如果我从存储过程(从 FlameRobin 或我自己使用 BDE(Borland 数据库引擎)组件的应用程序)运行相同的命令,结果是这样的
ID (integer) | SAMPLES (double precision) | NSAMPLES (double precision)
------------------------------------------------------------------------------
575 10.000000 10.000000
810 10.000000 10.000000
811 10.000000 NULL
有趣的是,SAMPLES 和 NSAMPLES 两列都具有相同的日期类型、相同的源值 (= 10.000000) 并且都可以为空。为什么从存储过程调用的复制命令不复制 NSAMPLES 列的值?取而代之的是,它将 NULL 值插入到新记录中。
添加 16.11.2012
也许可以在数据库管理工具 FlameRobin 的以下屏幕截图中找到一些提示。它们包含存储过程 INSERT_TEST 和表 TEST 的完整定义。
为什么字段列表中缺少 NSAMPLES 列???