Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 获取SQL Server临时表列类型_Sql Server_Metadata_Temp Tables - Fatal编程技术网

Sql server 获取SQL Server临时表列类型

Sql server 获取SQL Server临时表列类型,sql-server,metadata,temp-tables,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; OLEDB驱动程序确定每列的类型 但是临时表不会出现在信息\u SCHEMA.COLUMNS中 如何确定生成的#Temp表

我将CSV加载到临时表中,如下所示:

select * 
into #Temp
from openrowset('Microsoft.ACE.OLEDB.12.0', 
                'Text;Database=D:\DataFolder;', 
                'SELECT * from [DataFile.csv]') as x;
OLEDB驱动程序确定每列的类型

但是临时表不会出现在
信息\u SCHEMA.COLUMNS


如何确定生成的
#Temp
表中每列的数据类型?

下面的代码演示了如何获取所有列的信息。请注意,在[tempdb]中,表名为“______;”,带有许多下划线。因此,您必须以“LIKE _u%”的形式访问它,但这应该是可行的

作为奖励,我添加了代码以获得行计数

请注意,我通常只需“选择进入…”,然后编写表脚本并手动创建临时表。但是下面的代码可以满足您的需要

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%'; 

很不错的!现在假设我在SSMS中做了很多工作,并且打开了多个窗口/连接,在这些窗口/连接中我定义了一些临时表,如#test。是否有一种明显的方法将其范围限定到当前窗口的实例?(或者我应该将此作为一个单独的问题发布?)实际上,我一直想为我的github存储库和linkedin写一篇演示文稿来解决这个问题。试试你的建议,并对结果感到惊讶。此外,在父过程中创建本地临时表,然后尝试在子过程中访问它,或在子过程中覆盖它。结果不是你所期望的。但这已经超出了这个问题的范围,我在github上抛出了关于本地临时表(继承行为)的内容。如果您感兴趣,您应该能够使用它来逐步完成我提到的场景。请注意,我建议永远不要使用这种副作用行为,但您应该意识到这一点。哇,真让人困惑!我想知道临时表的范围是“未定义的”、“不确定的”,还是在某个地方确定和定义的。如果你有一个好的自我回答问题的想法,我会投赞成票@feetwet,我不确定我会问什么。。。我决定了这种行为,所以当我看起来有些OO瘾君子在某处使用它时,我知道我看到了什么,但我曾想过创建一个演示文稿,轻松展示这种行为,以便其他人能够发现并避免它。我会考虑一个合适的问题。如果你有什么想法,就去做吧。我的github网站是一个免费的网站。使用你需要的东西。