确定列的数据类型 - SQL选择

时间:2018-02-22 16:32:07

标签: sql data-handling

根据收到的结果,是否可以在SQL选择后确定每列的数据类型?我知道有可能通过information_schema.columns,但我收到的数据来自多个表并且是联合在一起的,并且数据被重命名。除此之外,我无法自己查看或使用此查询或执行其他查询。

我的工作是将收到的数据存储在另一张表中,但事先不知道我会收到什么。我显然能够检查某个列是否包含数字或文本,但如果它最初存储为TINYINT(1)或BIGINT(128)则不能。怎么解决这个问题?为了澄清,如果源和目标列的数据类型不完全相同,那就没关系,但我不想事先保留太多空间(或者说太少了)。

在我打字的时候,我意识到我错误地提出了这个问题。处理描述情况的最佳方法是什么?我想在运行中改变表格(例如,如果需要增加大小),但这似乎有点,好,错,而不是正确的方法。

由于

1 个答案:

答案 0 :(得分:0)

您可以在创建新表后发出以下有关新表的查询吗?

SELECT *
INTO JoinedQueryResults
FROM TableA AS A
    INNER JOIN TableB AS B ON A.ID = B.ID


SELECT * 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'JoinedQueryResults'

在知道结果有多大之前,查询是否太大而无法运行?了解它可以返回多少行,但是带有连接查询的技巧是对要加入的列进行分组,以帮助您更快地返回估计值。这里只是从上面的查询中返回一个行计数的例子,它会创建上面的JoinedQueryResults表。

SELECT SUM(A.NumRows * B.NumRows)
FROM (SELECT ID, COUNT(*) AS NumRows 
      FROM TableA 
      GROUP BY ID) AS A 
    INNER JOIN (SELECT ID, COUNT(*) AS NumRows 
                FROM TableB 
                GROUP BY ID) AS B ON A.ID = B.ID

如果您需要的是记录计数以帮助您估算大小,则上述查询将运行得更快。

还尝试使用类似的查询为您的结果实例化表。

SELECT TOP 0 *
INTO JoinedQueryResults
FROM TableA AS A
    INNER JOIN TableB AS B ON A.ID = B.ID