以下是我如何获取表
的列名列表SELECT t.name AS table_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%tkrt%' and t.name = 'timerate'
所以我得到一个清单:
table_name colunm_name
timerate tkrt01
timerate tkrt02
...
timerate tkrt50
现在在基于tkinit和tkeffdate的实际表中,我得到了这个
select * from timerate where tkinit = '0005' and tkeffdate =
(select MAX(tkeffdate) from timerate where tkinit = '0005')
tkinit tkeffdate tkrt01 tkrt02 ... tkrt22 ... tkrt50
0005 2014-01-01 00:00:00.000 440.00 NULL ... 400.00 ... NULL
所以返回有一些tkrt01,tkrt22的值...而某些tkrt是NULL
我在想是否使用第一个查询只返回一个colunm名称列表(tkrt01 ... tkrt50),如果有某种方法可以使用另一个查询来查看使用循环中的变量检查是否每列如果它为null则不返回它。 基本上我想要一个包含值的列名列表,所以我的最终结果是
column_name
tkrt01
tkrt22
因为那些只有两列中包含值。
对于每个人来说情况并非如此,因为我有两个项目来过滤tkinit和tkeffdate
每个id(tkint)都有不同的max(tkeffdate)。我已经看过为XML路径和For Each看看,但是无法找出从sys.tables连接sys.columns列出colunm名称的最佳方法,其中在特定表(t.name)中各自的列(基于两个过滤器)中有数据