0

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

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

当我打字时,我意识到我提出的问题是错误的。处理所描述情况的最佳方法是什么?我考虑过在运行中更改表(例如,如果需要,增加大小),但这似乎有点,嗯,错误,而不是正确的方法。

谢谢

4

1 回答 1

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
于 2018-02-22T17:08:59.073 回答