【问题标题】:sybase sql anywhere 11 query results are incorrectsybase sql Anywhere 11 查询结果不正确
【发布时间】:2018-04-19 10:21:58
【问题描述】:

我有以下表格,其中 >13.000 行。

CREATE TABLE "DBA"."mytable" (
"c1"                    numeric(8,0) NOT NULL,
"c2"                    numeric(2,0) NOT NULL,
"c3"                    numeric(4,0) NOT NULL,
"c4"                    numeric(8,0) NOT NULL,
PRIMARY KEY ("c1","c2","c3","c4") 
)

当至少有两行恰好满足条件时,以下查询不返回任何行:

select * from mytable A where A.c1=229 and A.c3=1

更奇怪的是,稍微修改(但相同)的查询版本按预期返回 2 行:

select * from mytable A where A.c1=229 and A.c3+1=2

怀疑数据库中存在一些物理损坏,我创建了一个新数据库,使用上述代码创建了表并从卸载文件中加载了值。结果是一样的。

我知道 PK 中的所有四列都不是好的设计,但这不应该成为数据库返回错误结果的借口。 通过使用列创建顺序并删除 PK,问题消失并再次出现。

是否有人知道有关此问题的修复或解决方法? 数据库位于 Windows 8 64 位系统上,语言环境为土耳其语。

谢谢

【问题讨论】:

  • 如果您使用integer 而不是numeric 会发生什么?既然你没有十进制数字,为什么还要麻烦numeric
  • 用整数测试过,没问题。但是在我的情况下,类型更改不是解析器,有很多 db 正在使用中。

标签: sql primary-key composite-primary-key sqlanywhere sybase-asa


【解决方案1】:

我记得很久以前我使用 Sybase 时,有时表的数据会默默地损坏。

我们找到的唯一解决方案是重新创建表并再次插入数据。很抱歉,这是我们找到的唯一解决方案。因此,您可以将数据复制到另一个表,然后删除并重新创建您的表,最后将数据复制回来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多