查詢,如果任何列包含空:
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