我有一個包含以下列的表:F1,F2,... F10 其中一些列僅包含NULLS,假設它們是F2和F7。 我怎樣才能得到一個字符串與這些列的名稱,我想獲得'F2,F7'作爲返回值。 這是一個臨時表和列名稱,列數未知。我需要一些非常通用的函數來提取包含NULL的列名稱從SQL Server表中獲取所有不爲NULL的列名稱
注意: 我知道在Oracle中使用某些系統對象(即all_tab_columns等)很容易,不確定是否可以在SQL Server中使用。
謝謝。
我有一個包含以下列的表:F1,F2,... F10 其中一些列僅包含NULLS,假設它們是F2和F7。 我怎樣才能得到一個字符串與這些列的名稱,我想獲得'F2,F7'作爲返回值。 這是一個臨時表和列名稱,列數未知。我需要一些非常通用的函數來提取包含NULL的列名稱從SQL Server表中獲取所有不爲NULL的列名稱
注意: 我知道在Oracle中使用某些系統對象(即all_tab_columns等)很容易,不確定是否可以在SQL Server中使用。
謝謝。
不知道爲什麼你需要這一點,但這樣的事情應該可以幫助您
Select CASE WHEN Len(res) > 0 THEN LEFT(res, Len(res) - 1) ELSE '' END AS result
From
(
select case when Count(F1)= 0 then 'F1,' else '' End +
case when Count(F2)= 0 then 'F2,' else '' End +
case when Count(F3)= 0 then 'F3,' else '' End +
.....
case when Count(F10)= 0 then 'F10,' else '' End
End as res
From yourtable
) A
這裏是一個未知的列名
DECLARE @sql VARCHAR(max) =''
SET @sql = ' Select CASE WHEN Len(res) > 0 THEN LEFT(res, Len(res) - 1) ELSE '''' END AS result
From
(
select'
SET @sql += (SELECT ' case when Count(' + COLUMN_NAME + ')= 0 then ''' + COLUMN_NAME + ','' else '''' End+'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'TableA'
FOR xml path (''))
SET @sql = LEFT(@sql, Len(@sql) - 1)
SET @sql += ' From yourtable) A (res)'
--SELECT @sql
EXEC (@sql)
我不認爲這個查詢會起作用。 –
@vkp - 可能你應該說爲什麼它不會改善我的回答 –
problem1-case在第一個真實條件下返回一個值,其他條件將被忽略。問題2-你應該使用'計數(當f1不爲空然後是1結束時)= 0' –
實際上,你應該重新設計你的表工作動態方法。這不是你怎麼做 –
爲什麼我應該重新設計表格?這不是關於表結構的問題,它與表NULL結構有關 –
您可以使用UNPIVOT和XML控制技巧。 –