临时表:CREATE 与 SELECT INTO
Temp tables: CREATE vs. SELECT INTO
我在 SQL 服务器中搜索并找到了 this article 关于临时 table 的信息,因为我在我们的一个存储过程中遇到了一行:
SELECT Value SomeId INTO #SomeTable FROM [dbo].[SplitIds](@SomeIds, ';')
我知道 #SomeTable
作为临时 table 存储在 tempdb
中。但是,我不明白为什么我们不必先使用 CREATE TABLE #SomeTable
,因为它是在提到的文章中写的。我们的代码运行良好,我只是不明白为什么使用 SELECT ... INTO #SomeTable
就足够了。如果我在开头添加 CREATE TABLE #SomeTable
会有什么后果?我们会在性能上有什么不同吗? table 会存储在另一个位置吗?
Select ... into [table]
使用从 Select
语句生成的数据集的属性创建临时 table 并随后填充 table.
使用 Select ... into [table]
的替代方法是使用 Create Table
语句后跟 Insert Into
语句。显式创建 table 可提供更多控制和精确度。
使用 Select ... into [Table]
似乎很容易,但在某些情况下 Select ... into [Table]
可能会出现问题。
例如,当您要创建临时 table 并在稍后插入其他行时,使用 Select ... into [Table]
语法可能会导致问题,尤其是对于基于字符串和可为空的字段.
作为 Select ... into [table]
限制的示例,下面的脚本创建了一个临时 table,其中包含两个字段,First_Name
和 Last_Name
。接下来,Insert
语句尝试将另一条记录添加到临时 table,但由于值将被截断而失败。
Select 'Bob' as First_Name
, 'Smith' as Last_Name
Into #tempTable;
Insert into #tempTable (First_Name, Last_Name)
Select 'Christopher' as First_Name
, 'Brown' as Last_Name;
脚本失败,因为 Select ... into [table]
语句创建了一个 table 等效于以下脚本:
Create Table #tempTable (
First_Name varchar(3) Not Null
Last_Name varchar(5) Not Null
);
我在 SQL 服务器中搜索并找到了 this article 关于临时 table 的信息,因为我在我们的一个存储过程中遇到了一行:
SELECT Value SomeId INTO #SomeTable FROM [dbo].[SplitIds](@SomeIds, ';')
我知道 #SomeTable
作为临时 table 存储在 tempdb
中。但是,我不明白为什么我们不必先使用 CREATE TABLE #SomeTable
,因为它是在提到的文章中写的。我们的代码运行良好,我只是不明白为什么使用 SELECT ... INTO #SomeTable
就足够了。如果我在开头添加 CREATE TABLE #SomeTable
会有什么后果?我们会在性能上有什么不同吗? table 会存储在另一个位置吗?
Select ... into [table]
使用从 Select
语句生成的数据集的属性创建临时 table 并随后填充 table.
使用 Select ... into [table]
的替代方法是使用 Create Table
语句后跟 Insert Into
语句。显式创建 table 可提供更多控制和精确度。
使用 Select ... into [Table]
似乎很容易,但在某些情况下 Select ... into [Table]
可能会出现问题。
例如,当您要创建临时 table 并在稍后插入其他行时,使用 Select ... into [Table]
语法可能会导致问题,尤其是对于基于字符串和可为空的字段.
作为 Select ... into [table]
限制的示例,下面的脚本创建了一个临时 table,其中包含两个字段,First_Name
和 Last_Name
。接下来,Insert
语句尝试将另一条记录添加到临时 table,但由于值将被截断而失败。
Select 'Bob' as First_Name
, 'Smith' as Last_Name
Into #tempTable;
Insert into #tempTable (First_Name, Last_Name)
Select 'Christopher' as First_Name
, 'Brown' as Last_Name;
脚本失败,因为 Select ... into [table]
语句创建了一个 table 等效于以下脚本:
Create Table #tempTable (
First_Name varchar(3) Not Null
Last_Name varchar(5) Not Null
);