错误“字符串转换错误”。 。 : : “。” (335544334)尝试添加另一列时

问题描述 投票:0回答:1

给出的是带有此 DDL 的 Firebird 5.0 表:

 CREATE TABLE KASSE_DETAILEDSTATISTICS 
 (ORDERDATE KASSE_ORDERTIMESTAMP NOT NULL,
  PRODUCTID KASSE_PRODUCTID NOT NULL,
  CONSUMPTIONPLACE KASSE_INHAUS NOT NULL,
  ORDERTYPE KASSE_ORDERTYPE NOT NULL,
  QUANTITY KASSE_QUANTITY NOT NULL,
  PRICESUM KASSE_PRICE,
  TRAININGPURCHASE KASSE_BOOLEAN NOT NULL,
  KASSE_ID KASSE_Z_KASSE_ID);

ALTER TABLE KASSE_DETAILEDSTATISTICS ADD PRIMARY KEY (ORDERDATE,PRODUCTID,CONSUMPTIONPLACE);

CREATE UNIQUE INDEX IDX_KASSE_DETAILEDSTATISTICS ON KASSE_DETAILEDSTATISTICS(ORDERDATE,PRODUCTID,CONSUMPTIONPLACE);

现在我尝试添加另一列,如下所示:

ALTER TABLE KASSE_DETAILEDSTATISTICS ADD TEST INTEGER;

但是在尝试提交时总是会导致此失败消息:

Conversion error from string "  .  .       :  :  ".

SQL Code: -413
IB Error Number: 335544334

好吧,看起来像是日期相关的,但是为什么 Firebird 想要转换一些 空字符串转换为时间戳? Firebird 只需添加一列即可!

表包含数据,ORDERDATE列仅包含有效的时间戳值!

sql firebird ddl
1个回答
0
投票

此错误是由您的自定义域之一的默认值无效引起的。我猜是

KASSE_ORDERTIMESTAMP
,默认设置为
'  .  .       :  :'

我猜你最初是在旧版本(我猜是 2.5 或更早版本,还没有测试过)中创建了这个数据库,在添加列时没有验证

NOT NULL
列。

现在,在 Firebird 5.0(我猜是 3.0 及更高版本)中,当您添加列时,Firebird 将生成一个新的格式版本,此时,将评估默认值,并产生此错误,因为它不是有效值.

您需要更改域以删除其默认值,然后才能添加新列:

alter domain ts_invalid drop default;

注意:这个答案基于推测和一些实验中观察到的行为。您的环境中可能还存在其他问题。如果您提供一个最小的可重复示例,我可能会提供更准确的答案。

© www.soinside.com 2019 - 2024. All rights reserved.