获取 SQL 服务器温度 table 列类型
Get SQL Server temp table column type
我正在像这样将 CSV 加载到临时 table 中:
select *
into #Temp
from openrowset('Microsoft.ACE.OLEDB.12.0',
'Text;Database=D:\DataFolder;',
'SELECT * from [DataFile.csv]') as x;
OLEDB 驱动程序确定每列的类型。
但临时 table 不会出现在 INFORMATION_SCHEMA.COLUMNS
中。
如何确定结果 #Temp
table 的每一列的数据类型?
下面的代码演示了如何获取所有列的信息。请注意,在 [tempdb] 中,table 名称是带有许多下划线的“____”。所以你必须以 "LIKE __%" 的形式访问它,但这应该有效。
作为奖励,我添加了获取行数的代码。
请注意,我通常只是 "SELECT INTO .." 然后编写 table 脚本并手动创建临时文件 table。但是下面的代码可以满足您的需求。
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%';
我正在像这样将 CSV 加载到临时 table 中:
select *
into #Temp
from openrowset('Microsoft.ACE.OLEDB.12.0',
'Text;Database=D:\DataFolder;',
'SELECT * from [DataFile.csv]') as x;
OLEDB 驱动程序确定每列的类型。
但临时 table 不会出现在 INFORMATION_SCHEMA.COLUMNS
中。
如何确定结果 #Temp
table 的每一列的数据类型?
下面的代码演示了如何获取所有列的信息。请注意,在 [tempdb] 中,table 名称是带有许多下划线的“____”。所以你必须以 "LIKE __%" 的形式访问它,但这应该有效。
作为奖励,我添加了获取行数的代码。
请注意,我通常只是 "SELECT INTO .." 然后编写 table 脚本并手动创建临时文件 table。但是下面的代码可以满足您的需求。
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%';