是否可以使用 SQL 通过表达式引擎表达式创建索引?
我们正在尝试在使用 Advantage 表达式引擎的 CDX 和 ADT 表上创建索引。
到目前为止,我们尝试的代码如下所示:
CREATE INDEX IDX1 ON TBL1 (STR(SOME_NUMBER_FIELD,6)+DTOS(SOME_DATE_FIELD));
Is it possible to create an index with the expression STR(SOME_NUMBER_FIELD,6)+DTOS(SOME_DATE_FIELD)
using SQL?
我们尝试用双引号、单引号和方括号引用表达式。
We are trying to create an index on CDX and ADT tables that use the Advantage expression engine.
The code we tried so far looks like this:
CREATE INDEX IDX1 ON TBL1 (STR(SOME_NUMBER_FIELD,6)+DTOS(SOME_DATE_FIELD));
Is it possible to create an index with the expression STR(SOME_NUMBER_FIELD,6)+DTOS(SOME_DATE_FIELD)
using SQL?
We tried quoting the expression with double quotes, single quotes and brackets.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用系统过程
sp_CreateIndex
来做到这一点:You can use the system procedure
sp_CreateIndex
to do that:骨架语法是
因此,要使代码正常工作,需要发生两件事。
我认为大多数 dbms 不接受列名表达式。但也许您可以评估表达式并提交有效的 SQL 字符串。
The skeleton syntax is
So two things need to happen for your code to work.
I think most dbms don't accept expressions for column names. But perhaps you can evaluate the expression and submit a valid SQL string instead.
马克的回答很正确。
对于 ADT 中的表达式索引,您应该注意的一件事是表达式中的任何 null 值都会将整个表达式的结果呈现为 null。这有时会导致开发人员从 CDX 切换到 ADT 时出现问题,因为 ADT 表支持 NULL 值。例如,如果 empid 或 doh 为 NULL,则上述表达式的结果将为 NULL。
另一件需要注意的事情是某些表达式索引可能无法用于 SQL 优化。如果您打算主要使用 SQL 来操作数据,那么最好使用标准 SQL 语法创建索引:
服务器将负责为 CDX 和 ADT 索引使用正确的表达式。 SQL 引擎可以使用该索引来优化数据选择。
Mark's answer is spot on.
One thing that you should be aware of with expression index in ADT is that any null value in the expression will render the result of the whole expression null. This sometimes causes problem for developer switching from CDX to ADT because NULL value is supported in ADT table. For example, the result of the above expression will be NULL if either empid or doh is NULL.
Another thing to watch out for is that certain expression index may not be usable for SQL optimization. If you intend to mostly using SQL to manipulate the data, it may be better to create the index using the standard SQL syntax:
The server will take care of using the correct expression for the CDX and ADT index. And the index will be usable by the SQL engine for optimizing selecting data.