首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储过程中sql命令的不同行为

存储过程中sql命令的不同行为
EN

Stack Overflow用户
提问于 2012-11-15 14:16:10
回答 1查看 139关注 0票数 0

源表测试(摘录)。括号中的值确定日期类型:

代码语言:javascript
复制
ID (integer)  |   SAMPLES (double precision)   | NSAMPLES (double precision)
------------------------------------------------------------------------------
575            10.000000                        10.000000

有问题的SQL命令如下:

代码语言:javascript
复制
insert into TEST
select * from TEST where ID=575;

如果我从开放源码工具FlameRobin的命令行执行此命令

更新后的表如下所示

代码语言:javascript
复制
ID (integer)  |   SAMPLES (double precision)   |  NSAMPLES (double precision)
------------------------------------------------------------------------------
575            10.000000                          10.000000
810            10.000000                          10.000000

如果我从存储过程(从FlameRobin或我自己的应用程序中使用BDE ()组件)运行相同的命令,结果如下

代码语言:javascript
复制
ID (integer)  |   SAMPLES (double precision)   | NSAMPLES (double precision)
------------------------------------------------------------------------------
575            10.000000                         10.000000
810            10.000000                         10.000000
811            10.000000                         NULL

有趣的是,两个列示例和NSAMPLES具有相同的日期类型,相同的源值(= 10.000000),而且都是可空的。为什么从存储过程调用的copy命令不复制NSAMPLES列的值?相反,它将空值插入到新记录中。

添加16.11.2012

也许可以在db管理工具FlameRobin的以下屏幕截图中找到一些提示。它们包含存储过程INSERT_TEST和表测试的完整定义。

为什么字段列表中缺少NSAMPLES列?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-15 15:21:30

问题是这两个环境对标识列的不同处理。

相反,请这样做:

代码语言:javascript
复制
 Insert into TEST(SAMPLES, NSAMPLES)
 Select SAMPLES, NSAMPLES 
 from TEST where ID = 575

也就是说,如果显式地命名所有列,问题就会消失。这通常是个好主意。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13399319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档