SET @sql = NULL;
SELECT CONCAT('SELECT * FROM table1 WHERE ',
GROUP_CONCAT(c.COLUMN_NAME SEPARATOR ' IS NOT NULL AND '),
' IS NOT NULL') INTO @sql
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE c.TABLE_NAME = 'table1'
ORDER BY c.ORDINAL_POSITION;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
CREATE TABLE #Temp (OdSal INT,NewSal INT,EmpName CHAR(20),IsCurrentEmp BIT)
INSERT INTO #Temp VALUES
(100,150,'Vikas',1), -- No null records
(NULL,NULL,NULL,NULL), -- all records are null
(NULL,NULL,'Nayanthara',1), -- more than 1 column is null
(NULL,150,'Priyamani',1) -- only one column is null
--Will return only one row
SELECT * FROM #Temp
WHERE LEN(OdSal) * LEN(NewSal) * LEN(EmpName) * LEN(IsCurrentEmp) IS NOT NULL
4条答案
按热度按时间cx6n0qe31#
您需要显式地列出每一列。我建议:
有些人可能更喜欢更简洁(但速度更慢)的方法,例如:
这实际上不是一种简单的表达方式,尽管您可以使用元数据表或电子表格构造查询。
xfyts7mz2#
虽然我建议写出每个列名并按照建议重构您的表,但这里有一个使用
dynamic sql
的选项:lx0bsm1f3#
要返回任何列中没有空值的行:(在PostgresSQL中)
选择 *
发件人 * 表格名称 *
WHERE * 表名 *. * 不为空
nxowjjhe4#
获取每列的长度并将它们相乘。如果结果不为空,则所有列都是非空值。尝试以下示例代码。由于我没有使用多个AND子句,因此这是一个更好的方法。