日期:2014-05-18  浏览次数:20376 次

在不遍历每个字段的情况下, 能否直接取出表中任意字段为null的记录
前提条件就是不遍历表中的字段
(不能where   field1   is   null   or   field2   is   null...)

比如table1

1                               2                           null
2                               3                           4
null                         1                           3
null                         5                           null
2                               3                           1


我想用sql把第1,   3,   4条记录取出来
请问这种sql有可能写出来吗?

------解决方案--------------------
where field1 not null and field2 not null.....哈哈哈
------解决方案--------------------
不遍历比较困难

select * from table1 where (field1+field2+field3) is null
------解决方案--------------------
不遍历字段挺困难的样子...
------解决方案--------------------
请问各位大虾 什么叫历表
------解决方案--------------------
select * from table1
where (field1+field2+field3) is null即可
换成乘*号也可以

因为作为数字类型字段的field1+field2+field3中只要有一个为null,那么他们相加的结果就会为null
------解决方案--------------------
加减乘除均可
------解决方案--------------------
换一种思路就很好办了,把null全部改成‘’不就可以了吗?
------解决方案--------------------
ALTER PROC UP_CHECKnull
@Table VARCHAR(100)
AS
BEGIN
DECLARE @S VARCHAR(8000)
SET @S= ' '
SELECT @S=@S+ ' AND ISNULL( '+NAME+ ', ' ' ' ') <> ' ' ' ' ' FROM SYSCOLUMNS WHERE ID=OBJECT_ID( ' '+@Table+ ' ')
ORDER BY COLORDER
Set @S=Stuff(@S,1,5, ' ')
SET @S= 'SELECT * FROM '+@Table+ ' WHERE 主键字段 NOT IN (SELECT 主键字段 FROM '+@Table+ ' WHERE '+@S+ ') '
EXEC(@S)
END

GO

--说明:该存储过程需要指定表的主键字段,与其它字段无关.
--查询的时候.只需要指名表名即可.

exec UP_CHECKnull '表名 '