gpt4 book ai didi

sql - 测试列的存在

转载 作者:行者123 更新时间:2023-11-29 03:55:30 24 4
gpt4 key购买 nike

假设我不确定数据库 d 中的表 t 是否有列 x。也许这是因为应用程序使用的一些数据库已经升级,有些还没有升级,所以有些有 t.x 而有些没有。

现在假设我只需要一个简单的查询来从 d.t 中获取一行,如果该列存在,我需要 d.t.x 的值,如果不存在,则需要一些默认值。

我知道如何使用两个查询执行此操作,其中第一个查询查看列 x 是否存在,应用程序相应地调整第二个查询。但是我可以将这个逻辑移到 SQL 中并在一个查询中完成吗?如果有一个 COLUMN_EXISTS() 函数,那么查询将是:

SELECT s, t, IF(COLUMN_EXISTS(x), x, 'NO_COL_x') AS x FROM d.t ...;

最佳答案

这是您可能感兴趣的查询:

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = ‘tablename’ AND COLUMN_NAME = ‘column’)

您可以将其包装在一个将表名和列名作为参数的函数中,然后在您的查询中使用它。

仍然不确定这是否可行,因为查询可能仍会由于引用查询中不存在的列而出错(即使如果该列不存在,IF 将始终返回 false)

另一种选择是使用该函数动态构建查询,而不是尝试在查询本身中使用它。但这当然会变得有点复杂。

最终,最好的方法是使用存储过程,而不是将查询放入您的代码中。这样,当数据库升级时,sproc 也会“升级”以匹配新模式,并且您不必(那么多)担心代码版本是否与数据库版本匹配。

关于sql - 测试列的存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1985579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com