4

如何从表中选择数据并将数据类型包含在值中?例如,我有一个名为 EMPLOYEE 的表,其中包含 fname、lastname、phone 等。如果我这样做:

SELECT * FROM EMPLOYEE

我得到了所有的专栏。如果我做:

SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'EMPLOYEE'
ORDER BY ORDINAL_POSITION

我得到了所有的列名和它们的数据类型。

我需要将这两者结合起来,以便将值与数据类型一起显示。

我是 SQL 新手,但我在网上搜索了一些并尝试了各种 JOIN 和 UNION 语句,但我可能只是输入错误。

4

1 回答 1

2

您可以SELECT EMPLOYEE.COL1, INFO.DATA_TYPE FROM EMPLOYEE, INFORMATION_SCHEMA.COLUMNS INFO WHERE INFO.TABLE_NAME='EMPLOYEE' AND COLUMN_NAME='COL1' 但是要选择更多字段,您必须使用不同的别名再次添加另一个 INFORMATION_SCHEMA.COLUMNS 实例。

但出于多种原因,您不应该这样做。

从技术上讲:CROSS JOIN(FROM 中的表仅用逗号列出)对数据库服务器造成很大压力。FROM T1, T2将 T1 的所有行与 T2 的所有行配对并检查结果行。如果 T1 有 n 行而 T2 有 m 则结果有 n*m 行。

逻辑 1:您不应该需要返回此信息。当您输入查询(SELECT)时,返回的模式是已知的;查询确定结果列的数据类型。逻辑2:由于每一行在列中具有相同的数据类型,因此您不需要在每一行中返回类型信息。例如,您的示例返回 1000 名员工的数据将不必要地在 AGE 字段为 INTEGER、NAME 为 VARCHAR等的每一行上传输......

如果您不知何故不知道结果的架构(例如,由于生成的查询等),那么上述解决方案对您没有帮助。

于 2012-10-29T00:10:33.540 回答