根据收到的结果,是否可以在SQL选择后确定每列的数据类型?我知道有可能通过information_schema.columns,但我收到的数据来自多个表并且是联合在一起的,并且数据被重命名。除此之外,我无法自己查看或使用此查询或执行其他查询。
我的工作是将收到的数据存储在另一张表中,但事先不知道我会收到什么。我显然能够检查某个列是否包含数字或文本,但如果它最初存储为TINYINT(1)或BIGINT(128)则不能。怎么解决这个问题?为了澄清,如果源和目标列的数据类型不完全相同,那就没关系,但我不想事先保留太多空间(或者说太少了)。
在我打字的时候,我意识到我错误地提出了这个问题。处理描述情况的最佳方法是什么?我想在运行中改变表格(例如,如果需要增加大小),但这似乎有点,好,错,而不是正确的方法。
由于
答案 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