我有一個大約20列的表。除了打字:有沒有一種快速檢查ANY列是否爲空的方法?
Where column1 is null OR column2 is null OR column3 is null etc...
有沒有更快的方法只是檢查每一個欄,看看是否有值爲空,如果是,返回記錄?
我有一個大約20列的表。除了打字:有沒有一種快速檢查ANY列是否爲空的方法?
Where column1 is null OR column2 is null OR column3 is null etc...
有沒有更快的方法只是檢查每一個欄,看看是否有值爲空,如果是,返回記錄?
不可以。有很多方法可以更快地編寫代碼,但沒有像您所暗示的那樣的快捷方式。採取從an answer I gave on dba.stackexchange:
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;
在SQL Server 2005中不起作用,但希望OP能知道該怎麼做。 – 2012-03-14 21:58:07
@Andriy謝謝。糾正。我時刻都在盯着自己,有時候我會想念它。在這種情況下,我從2008年的問題中複製出來。 – 2012-03-14 21:59:03
歡迎您。 :) – 2012-03-14 22:07:38
這取決於更快的手段。
如果您的意思是更快執行SQL Server,您可以執行的一項操作是編寫觸發器,而不是更新指定整行(除了位和主鍵)是否爲NULL的位列。但是,應該有一個真正的好理由,因爲它會影響你的更新性能。這些列上的索引也會有幫助。
如果你的意思是寫得更快,你可以讓SQL爲你生成where子句。但是,除非你這麼做,否則我認爲這是不值得的。
教學對魚讓 - 你 - 的魚INSTEAD-OF-這樣回答的位置:做的
一種方式是通過創建一個存儲過程,組裝和運行動態查詢。
存儲過程將:
OR
語句。您可以使用像這樣找到的列名:
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.Columns where TABLE_NAME = <table_name>
然後,我會寫使用這個程序,這將通過在表中的項目和列名循環。
更快地編寫或更快地執行? – 2012-03-14 19:51:34