dii*_*___ 3 t-sql sql-server temp-tables sql-server-2014
我搜索并找到了这篇关于 SQL Server 中临时表的文章,因为我在我们的一个存储过程中遇到了一行说:
SELECT Value SomeId INTO #SomeTable FROM [dbo].[SplitIds](@SomeIds, ';')
Run Code Online (Sandbox Code Playgroud)
我知道它#SomeTable
是tempdb
作为临时表存储的。但是,我不明白为什么我们不必先使用,CREATE TABLE #SomeTable
因为它是在提到的文章中写的。我们的代码运行良好,我只是不明白为什么使用SELECT ... INTO #SomeTable
. CREATE TABLE #SomeTable
一开始加的话会有什么后果?我们会得到性能上的任何差异吗?该表会存储在另一个位置吗?
Select ... into [table]
使用从Select
语句生成的数据集的属性来创建临时表并随后填充该表。
using 的替代方法Select ... into [table]
是使用一个Create Table
语句,然后是一个Insert Into
语句。显式创建表可提供更多控制和精度。
使用 aSelect ... into [Table]
似乎很容易,但在某些情况下Select ... into [Table]
可能会出现问题。
例如,当您打算创建一个临时表并稍后插入其他行时,使用该Select ... into [Table]
语法可能会导致问题,尤其是对于基于字符串和可为空的字段。
作为 限制的示例,Select ... into [table]
下面的脚本创建了一个包含两个字段的临时表,First_Name
以及Last_Name
。接下来,一条Insert
语句尝试向临时表添加另一条记录,但由于值将被截断而失败。
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;
Run Code Online (Sandbox Code Playgroud)
该脚本失败,因为该Select ... into [table]
语句创建了一个与以下脚本等效的表:
Create Table #tempTable (
First_Name varchar(3) Not Null
Last_Name varchar(5) Not Null
);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4622 次 |
最近记录: |