2010-08-02 70 views
0

這就是問題所在:如何確定一個SQL錶行包含NULL以外的值

我有一個列數未知的表。所有的列都是真實的。

假設該表中只有一行,我需要一個方法來確定在該表/行中是否存在NULL以外的值。

我不知道在運行時的列數,也沒有他們的名字(不要想用c光標)

SQL Server 2005中

我感謝你的幫助。

+8

「我有一個列數未知的表。」 - 有你的問題!表應該有一個已知數量的列...聽起來像是濫用正常形式...沒有列名的 – 2010-08-02 10:13:51

+0

你如何定義條件你必須在這裏使用循環或光標。 – KuldipMCA 2010-08-02 10:17:58

+0

-1:「我不知道運行時的列數和名稱。假。你可以通過查看錶格定義來了解這一點。不要試圖寫出在這些不可能的條件下工作的神奇軟件。 – 2010-08-02 10:18:49

回答

1

這裏有一種方法 - 如果行中的所有值均爲NULL校驗和()沒有返回值:

create table #t (col1 real, col2 real, col3 real) 
select checksum(*) from #t 
if @@rowcount = 0 
    print 'All values are NULL' 
else 
    print 'Non-NULL value(s) found' 
drop table #t 

在另一方面,我真的不知道,如果這是你在做什麼:一個「內置的臨時表」聽起來像是你自己管理的東西。有了更多關於您想要實現的信息,我們可能會提出更好的解決方案。

順便說一句,單行表存儲設置沒有任何問題。它有一個很大的優點,即每個設置都有一個單獨的數據類型,可以有CHECK約束等。

+0

謝謝,似乎如果有一行的空值有一個校驗和值。在你的例子中,根本沒有行,所以返回值是空的,但是你給了我一個關於如何解決問題的好主意。 – Gilad 2010-08-05 13:55:25

0

聽起來像你正在做某種設置/屬性表,基於你知道你只有1行的事實。如果你需要動態屬性,這是錯誤的做法;取而代之的是具有2列的表格:optionvalue。然後,對於每個動態屬性,您將存儲一行。

+0

我同意這是一個更好的方法,但問題是,這個問題是一個更大的過程的一部分,它正在尋找一個補丁或重新設計可能需要分配時間的整個過程。 – Gilad 2010-08-02 10:23:04

相關問題