如何在SQL Server中将列名转换为结果值?

时间:2010-03-22 20:54:58

标签: sql sql-server sql-server-2005

我有一个表,它在遗留数据库中具有基本上的布尔值。列名作为字符串值存储在另一个表中,因此我需要将一个表的列名与另一个表中的字符串值相匹配。我知道必须有一种方法可以直接使用SQL Server中的SQL来实现这一点,但它超出了我的范围。

我最初的想法是使用PIVOT,但默认情况下没有启用,启用它可能是一个很难的过程,将更改推送到生产数据库。我更喜欢使用默认启用的功能。

我正在考虑使用COALESCE将布尔值转换为我需要的值的字符串。这将是一个手动过程。

我想我也会使用表变量将第一个查询的结果插入到该变量中,然后使用这些结果进行第二次查询。我仍然遇到列在一行上的问题,所以我希望我可以轻松地转动值,将结果集中的列名称作为字符串。但是,如果我可以轻松地做到这一点,我可以轻松地用子选择来编写查询。

欢迎任何提示。

5 个答案:

答案 0 :(得分:1)

在SQL Server中检出Sysobjects和SysColumns。它们是2个SQL表,它们为您提供数据库中表的名称以及与该表一起使用的列的名称。

系统视图INFORMATION_SCHEMA.COLUMNS也会为您提供所需的内容。

答案 1 :(得分:1)

您可以构建SQL字符串,然后将该字符串作为查询执行。无论如何不是最漂亮但我觉得它会按你想要的方式工作。您只需使用游标或while循环来构建字符串。

答案 2 :(得分:0)

如果您对.Net感到满意,您可以用您选择的语言编写自己的存储过程,并在代码中操作数据。

这是一个开始的链接 CLR Stored Procedures

答案 3 :(得分:0)

我不太确定我理解你的设计当前是如何放在一起的(你可以发布一个例子吗?),但是information_schema.columns视图会给你一个包含所有列名作为字符串值的表。如果你加入你的第二张桌子,我想你可能会得到你需要的东西。

答案 4 :(得分:0)

例如,我有一个表STATEtbl有3列,我想把这个表的所有列名称作为ROW值...我使用下面的查询

Select SC.name as Columns from Syscolumns SC
Join Sysobjects SO On SC.id = SO.Id
where Object_name(SO.Id) = 'STATEtbl'

查询结果:

Columns
--------
State
StateCode
StateFullName