我在运行时使用不同的列名和表进行动态SQL查询。
我希望让SQL查询根据行中是否包含任何单元格中的Null值来忽略读取数据。
SELECT rsv_intension_rsvt
FROM resolve_table_kb
where rsv_intension_rsvt is not null;
我知道使用IS NOT NULL
。
但问题是我不知道查询语法(即列名,以便可以使用IS NOT NULL
)。
是否存在可用于SQL查询的动态解决方案,仅当所选行中的所有单元格都为NOT NULL时才读取/收集行。
由于
答案 0 :(得分:0)
不,没有select where * is not null
类型的查询。您必须单独测试每个字段:
SELECT ...
FROM ...
WHERE field1 is not null AND field2 is not null AND .... AND fieldN is not null
你可以尝试COALESCE()
操作,但这仍然是丑陋的:
WHERE COALESCE(field1, field2, ..., fieldN, 'allarenull') <> 'allarenull'
但是你仍然必须列出表格中的所有字段。
答案 1 :(得分:0)
答案 2 :(得分:0)
我不确定dynamic
是什么意思,但是如果你的意思是你实际上是在运行时构建你的查询,那么你可以得到所有列的所有可用列名(可以为空或者为空)在给定数据库中给定表格,然后您可以将它们放在一起以进行所需的查询。
SELECT
COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
table_name = '<TABLE_NAME>'
AND IS_NULLABLE = 'YES'
AND TABLE_SCHEMA='<DB_NAME>';
(如果您已经选择了正确的数据库)(tables reference,columns reference)
SELECT
Cols.name
FROM sys.all_columns AS Cols
INNER JOIN sys.tables AS Tabs ON Cols.object_id = Tabs.object_id
WHERE
Tabs.name = '<TABLE_NAME>'
AND Cols.is_nullable = 1;
(已选择适当的数据库)
SELECT
COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE
TABLE_NAME = '<TABLE_NAME>'
AND NULLABLE = 'Y';
不确定这是否是一般的Oracle事物(因为我主要使用SQL-Server),但是当我用小提琴尝试这个时,我必须指定的表名始终是大写字母的