0

源表 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 列???

在此处输入图像描述

4

1 回答 1

0

问题是两种环境对 IDENTITY 列的不同处理。

相反,请执行以下操作:

 Insert into TEST(SAMPLES, NSAMPLES)
 Select SAMPLES, NSAMPLES 
 from TEST where ID = 575

即,如果您明确命名所有列,问题就会消失。无论如何,这通常是一个好主意。

于 2012-11-15T15:21:30.287 回答