2

假设我有一张像下面这样的桌子

pp_refno   pp_rectype   _pp_account  pp_empid   pp_dept
---------------------------------------------------------
90221      contractor    061509864   C00001121  1111000139

是否可以编写查询以使数据以这种格式返回?

field_name          field_type     field_value
---------------------------------------------------------
pp_refno            int             90221
pp_rectype          char            contractor
pp_account          char            061509864
pp_empid            char            C00001121 
pp_dept             char            1111000139
4

2 回答 2

0

是的,这可以通过使用您正在使用的数据库的信息模式来实现。但是,您必须添加 1 列才能将其用于多行:

field_name          field_type     field_value        pp_refno
--------------------------------------------------------------
pp_refno            int             90221             90221
pp_rectype          char            contractor        90221
pp_account          char            061509864         90221
pp_empid            char            C00001121         90221
pp_dept             char            1111000139        90221

这样您就可以识别多条记录。

此外,您还必须为每个表编写或生成一个特定的查询,由于数据的工作方式,这可能很大而且很慢。

如果您只是检索单行,您还可以使用存储过程以给定的方式列出您的数据。

于 2016-04-05T19:10:57.503 回答
0

您可以使用 SQL 查询的 UNPIVOT 函数来实现此行为。下面的链接通过类似的示例为您提供了更多想法。

示例 Stackoverflow 链接

要读取列类型,您需要加入 sys 表并获取列类型

SELECT DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE 
 TABLE_NAME = 'yourTableName' AND 
 COLUMN_NAME = 'yourColumnName'

一旦您拥有了 unpivot 表别名,您应该能够将其与 SCHEMA.columns 表连接起来并实现您的逻辑

于 2016-04-05T19:39:15.400 回答