获取 SQL Server 临时表列类型

fee*_*wet 3 sql-server metadata temp-tables

我正在将 CSV 加载到这样的临时表中:

select * 
into #Temp
from openrowset('Microsoft.ACE.OLEDB.12.0', 
                'Text;Database=D:\DataFolder;', 
                'SELECT * from [DataFile.csv]') as x;
Run Code Online (Sandbox Code Playgroud)

OLEDB 驱动程序确定每列的类型。

但是临时表不会出现在INFORMATION_SCHEMA.COLUMNS.

如何确定结果#Temp表中每一列的数据类型?

Kat*_*sey 5

下面的代码演示了如何获取所有列的信息。请注意,在 [tempdb] 中,表名是带有很多下划线的“____”。所以你必须以“LIKE __%”的形式访问它,但这应该有效。

作为奖励,我添加了代码来获取行数。

请注意,我通常只是“SELECT INTO ..”,然后编写表格并手动创建临时表。但下面的代码将适用于您想要的。

CREATE TABLE #test
  (
       [id]     INT
       , [name] NVARCHAR(12)
  );


--
-- get columns and types
------------------------------------------------- 
SELECT [columns].[name]
       , [types].[name]
       , [columns].*
       , [types].*
FROM   [tempdb].[sys].[columns] AS [columns]
       JOIN [tempdb].[sys].[tables] AS [tables]
         ON [tables].[object_id] = [columns].[object_id]
       JOIN [sys].[types] AS [types]
         ON [types].[user_type_id] = [columns].[user_type_id]
WHERE  [tables].[name] LIKE N'#test__%'; 


--
-- get row count
------------------------------------------------- 
SELECT [objects].[name]                      AS [table]
       , [dm_db_partition_stats].[row_count] AS [row_count]
       , *
FROM   [tempdb].[sys].[dm_db_partition_stats] AS [dm_db_partition_stats]
       INNER JOIN [tempdb].[sys].[objects] AS [objects]
               ON [dm_db_partition_stats].[object_id] = [objects].[object_id]
WHERE  [objects].[name] LIKE '#test%'; 
Run Code Online (Sandbox Code Playgroud)