在我的数据库中,列cardid
未设置为空,即不允许为空。
当我在delphi cum zeos TZQuery中运行以下查询时,结果字段card_id0
的属性必须为true,这是正确的,但结果字段card_id1
不是{card_id1
周围的引号{1}}似乎意味着给我数据但没有约束。
select c.id, c.cardid as card_id0, c.cardid as "card_id1"
from mydata c
这是sql的标准吗?
答案 0 :(得分:0)
不要认为这与sql有任何关系,你没有得到带有结果集的约束。 我猜这是TZQuery。作为一个猜测我会说它去了并得到了表C的元数据,假设在cardid和cardid0之间的地图,然后没有“card_id1”。
颠倒select子句中字段的顺序,查看所需属性是否与之交换。
答案 1 :(得分:0)
您所看到的是,TZQuery未从表/查询元数据中检测到数据库约束(非空)。仅当您通过TZQuery组件添加或更新记录时,这才有意义。如果您尝试添加或更新card_id0
或card_id1
的空值记录,您仍会收到异常。该异常将由数据库而不是组件生成。
通常,引用字段名称(或别名)仅用于允许SQL查询中字段名称中的非法字符,即。例如,在字段名称中有空格。引用字段名称可能会产生副作用,例如在Firebird / Interbase中,引用字段名称会使其区分大小写,而它们通常不区分大小写。