![](/img/trans.png)
[英]Sql query based on variable value, need to ignore null variables and consider variables containing values
[英]Dynamic SQL Query to ignore null values based on null value in cell
我在運行時有一個具有不同列名和表的動態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查詢,僅當選定行中的所有單元格都不為空時才讀取/收集行。
謝謝
不,沒有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'
但是您仍然必須列出表中的所有字段。
我不確定dynamic
是什么意思,但是如果您是說實際上是在運行時構建查詢的,那么您可以獲取給定數據庫中給定表的所有列的所有可用列名(可為空或不可為空),那么您只需將它們組合在一起即可進行所需的查詢。
SELECT
COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
table_name = '<TABLE_NAME>'
AND IS_NULLABLE = 'YES'
AND TABLE_SCHEMA='<DB_NAME>';
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),但是當我用小提琴進行嘗試時,必須指定的表名始終使用大寫字母。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.