查询,如果任何列包含空:
DECLARE @tb NVARCHAR(255), @sql NVARCHAR(MAX);
SET @tb = N'dbo.[table]';
SET @sql = N'SELECT * FROM ' + @tb + ' WHERE 1 = 0';
SELECT @sql = @sql + N' OR ' + QUOTENAME(name) + ' IS NULL'
FROM sys.columns
WHERE [object_id] = OBJECT_ID(@tb);
EXEC sp_executesql @sql;
可能的帮助。您也可以只检查是否重要的列是空的,并显示唯一有效的:
select *
from tabName
where col1 is not null and col6 is not null...
在最后您可以考虑创建第二个表1比1与旧值,如果它们是重要的。所有的表需要刷新不时:)
编辑:
我认为这是类似于你正在寻找查询:
Select [TransactionID] , [ProductID] ,[ReferenceOrderID] ,[ReferenceOrderLineID], [TransactionDate] ,[TransactionType] ,[Quantity],[ActualCost] ,[ModifiedDate]
from tableName
where datediff(year,[TransactionDate], GETDATE()) < 5
and ([ProductID] is not null and [ProductID] != '')
and ([TransactionType] is not null and [TransactionType] != '')
and ([Quantity] is not null)
and [ActualCost] is not null
好了,是什么在此查询回事?选择后,列出要显示的列。如果你需要全部输入“select *”。然后你选择表格(通过选择),这里就是魔法。
datediff(year,date1,date2)计算两个日期之间的差异。要检查今天的日期,只需输入GETDATE()。比其他条件。不像普通的编程语言,你不能输入“something!= null”,你需要使用“something not not null”。有时你必须检查它是空字符串还是空字符串。所以
([ProductID] is not null and [ProductID] != '')
我希望帮助:)
你想只显示有40列空值的记录客户或您的期望是省略有空的行并输出剩余的行。 – Joby
他们不满意的事实是:行数太多,或者解决方案返回的数据太多这一事实?还是你的解决方案返回了它不应该的列?从你的问题中很难分辨出来,你可能应该详细说明一下。 –
嗨普罗霍罗夫,他们不满意的事实,查询返回太多的数据。我的期望是显示具有空值的列。 – user7918666