I have a dynamic SQL query with different column names and tables at runtime.
I am looking to get the SQL query to ignore reading data based on if a row contains Null v
I am not sure what you mean by dynamic
, but if you mean that you actually build your queries at runtime, then you can get all available column names of all columns (that are nullable or not) for a given table in a given database, then you can simply put them together for your desired query.
SELECT
COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
table_name = '<TABLE_NAME>'
AND IS_NULLABLE = 'YES'
AND TABLE_SCHEMA='<DB_NAME>';
(provided you already selected the correct database) (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;
(having already selected the appropriate database)
SELECT
COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE
TABLE_NAME = '<TABLE_NAME>'
AND NULLABLE = 'Y';
Not sure if this is a general Oracle-thing (as I am working mostly with SQL-Server), but when I tried this out with a fiddle, the table name I had to specify was always in uppercase letters.
I believe you will need to use a stored procedure or multiple joins(which might not be the healthiest solution) to solve this as Marc B indicated. You can also check the following question that addresses the same issue you are asking about.
No, there's no select where * is not null
-type query. You have to test every field individually:
SELECT ...
FROM ...
WHERE field1 is not null AND field2 is not null AND .... AND fieldN is not null
You could try a COALESCE()
operation, perhaps, but that's still ugly:
WHERE COALESCE(field1, field2, ..., fieldN, 'allarenull') <> 'allarenull'
but then you STILL have to list all of the fields in the table.