我有一个大约40列具有空值的函数,这些列在过去5年中从未使用过。所以我想编写一个确认这些字段为空值的查询。我在下面使用了一个选择查询:
select col1, col2, col3, .....coln
from dbo.fn_functionName(DATEADD(YEAR, -5, DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)),'','','','')
此查询的问题在于,它返回了超过10 000条记录而我的客户不满意。
答案 0 :(得分:0)
查询以检查是否有任何列包含null:
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
好的,那么这个查询中发生了什么?选择后,您将列出要显示的列。如果您需要所有这些,只需输入&#34;选择*&#34;。然后你选择表格(通过选择它),这就是魔术 datediff(year,date1,date2)计算两个日期之间的差异。要查看今天的日期,只需输入GETDATE()即可。比其他条件。与普通的编程语言不同,你不能键入&#34;某些东西!= null&#34 ;,你需要使用&#34;某些东西不是空的&#34;。有时您必须检查它是否为空或字符串为空。所以
([ProductID] is not null and [ProductID] != '')
我希望有所帮助:)
答案 1 :(得分:0)
这正是我需要使用的:
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