假设我有一个类似下面的表
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
是的,这可以通过使用您正在使用的数据库的信息模式来实现。然而,您必须添加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
通过这种方式,您可以识别多个记录。
此外,您还必须为每个表编写或生成一个特定的查询,由于数据的工作方式,查询可能很大,速度也很慢。
如果只检索单行,还可以使用存储过程以给定的方式列出数据。
您可以使用SQL查询的UNPIVOT函数来实现这种行为。下面的链接通过类似的例子为您提供了更多的想法。
堆栈溢出链接示例
要读取列类型,您需要连接sys表并获得列类型
SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'yourTableName' AND
COLUMN_NAME = 'yourColumnName'
一旦您有了unpivot表别名,您就应该能够将其与SCHEMA.columns表连接起来,并获得逻辑实现的