在不遍历每个字段的情况下, 能否直接取出表中任意字段为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 '表名 '