2012-03-14 92 views

回答

4

不可以。有很多方法可以更快地編寫代碼,但沒有像您所暗示的那樣的快捷方式。採取從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; 
+0

在SQL Server 2005中不起作用,但希望OP能知道該怎麼做。 – 2012-03-14 21:58:07

+0

@Andriy謝謝。糾正。我時刻都在盯着自己,有時候我會想念它。在這種情況下,我從2008年的問題中複製出來。 – 2012-03-14 21:59:03

+0

歡迎您。 :) – 2012-03-14 22:07:38

0

這取決於更快的手段。

如果您的意思是更快執行SQL Server,您可以執行的一項操作是編寫觸發器,而不是更新指定整行(除了位和主鍵)是否爲NULL的位列。但是,應該有一個真正的好理由,因爲它會影響你的更新性能。這些列上的索引也會有幫助。

如果你的意思是寫得更快,你可以讓SQL爲你生成where子句。但是,除非你這麼做,否則我認爲這是不值得的。

1

教學對魚讓 - 你 - 的魚INSTEAD-OF-這樣回答的位置:做的

一種方式是通過創建一個存儲過程,組裝和運行動態查詢。

存儲過程將:

  • 具有表名稱作爲輸入參數。
  • 查詢特定表結構的元數據系統表。
  • 動態彙編一個字符串(實際查詢)和該表的列的OR語句。
  • 運行已組裝的查詢並返回結果。
2

您可以使用像這樣找到的列名:

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.Columns where TABLE_NAME = <table_name> 

然後,我會寫使用這個程序,這將通過在表中的項目和列名循環。

來源:http://codesnippets.joyent.com/posts/show/337

相關問題