为了应用起见,这里的主要目标是在我的前端我希望能够从sql server表中提取字段数据并将其存储在我自己的数据库中。 (应用程序从数据库值创建数据文件)。但我想要元数据和
假设我的表FOO定义如下:
create TABLE foo
( id INT NOT NULL
, col2 INT NOT NULL
, col3 VARCHAR(10) NULL
, col4 DATE NULL
, col5 DECIMAL(14,5) NULL
);
定义数据:
INSERT INTO foo (id, col2, col3, col4, col5) VALUES
(1,1,NULL,NULL,NULL)
,(2,2,'2','2/2/2012',22.22)
,(3,3,'3','3/3/2013',333.333)
,(4,4,NULL,'4/4/2014',4444.4444)
,(5,5,'5',NULL,55555.55555)
,(6,6,'6','6/6/2016',NULL);
假设这可以应用于我不知道列的任何表,我希望返回以下内容:
column_name | value
----------------------------
id | 1
col2 | 1
col3 | 2
col4 | 2/2/2012
col5 | 22.22
所以基本上,我想要检索具有该列的第一个非null值的column_name,但是此时我将解决一个只返回第一个值的解决方案,即使它是null。
现在,我有一个查询来获取所有元数据,但我不知道如何在查询中添加另一列以获取该列名的数据。 (简化为仅拉取column_name,因为我还检索其他元数据)。同样,我必须动态地执行它,并且不能将其存储为过程。
SELECT
sc.name AS column_name
FROM
sys.columns sc
WHERE
sc.object_id = OBJECT_ID('FOO')
ORDER BY
sc.column_id
我看到的所有答案都是非动态的,带有硬编码的列名,但我正在寻找一个选项,只需插入表名,它就可以跨表运行。我不确定它是否可能。即这solution