临时表与创建和删除表

时间:2012-01-18 14:16:04

标签: sql-server create-table sql-drop

我正在创建一个表“InterviewTemp”,在那里插入数据,用该数据更新第二个表,然后删除“InterviewTemp”表。

有一个例子:

CREATE TABLE [entrevistasTemp](
    [id_usuario] [int] NULL,
    [id_entrevista] [int] NULL,
    [comentarios] [varchar](300) NULL
)

INSERT [entrevistasTemp] ([id_usuario], [id_entrevista], [comentarios]) VALUES (12099, 4515, CONVERT(TEXT, N'Riesgo muy alto.  Marun Victoria, '))
INSERT [entrevistasTemp] ([id_usuario], [id_entrevista], [comentarios]) VALUES (15347, 4516, CONVERT(TEXT, N'Riesgo muy alto.  Marun Victoria, '))

UPDATE entrevistas 
    set entrevistas.comentarios = entrevistasTemp.comentarios 
    from entrevistasTemp
WHERE entrevistas.id = entrevistasTemp.id_entrevista

drop table entrevistasTemp

有更好的方法吗?

编辑:只插入4.5k行

3 个答案:

答案 0 :(得分:5)

创建临时表而不是表:

CREATE TABLE #entrevistasTemp(
    [id_usuario] [int] NULL,
    [id_entrevista] [int] NULL,
    [comentarios] [varchar](300) NULL
)

INSERT #entrevistasTemp ([id_usuario], [id_entrevista], [comentarios]) VALUES (12099, 4515, CONVERT(TEXT, N'Riesgo muy alto.  Marun Victoria, '))
INSERT #entrevistasTemp ([id_usuario], [id_entrevista], [comentarios]) VALUES (15347, 4516, CONVERT(TEXT, N'Riesgo muy alto.  Marun Victoria, '))

UPDATE entrevistas 
    set entrevistas.comentarios = #entrevistasTemp.comentarios 
    from #entrevistasTemp
WHERE entrevistas.id = #entrevistasTemp.id_entrevista

drop table #entrevistasTemp

答案 1 :(得分:2)

完全取决于所插入数据的大小和所访问行的频率。

如果您有一个大型数据集,那么您可以创建一个表插入数据到该表,然后在表中实现索引,然后使用该表进行任何进一步的操作,然后删除表。

如果数据量有限。那么接受aF的回答将是更可取的。

答案 2 :(得分:1)

甚至比临时表(如果您的SQL Server版本支持它[2005+]更好)是一个表变量。创建临时表时,SQL Server 必须在运行时重新编译查询。表变量没有此问题。它们也是在内存而不是在磁盘上创建的,并且具有fewer locking and transaction log contention issues

代码看起来像这样:

DECLARE @entrevistasTemp TABLE
(
    [id_usuario] [int] NULL,
    [id_entrevista] [int] NULL,
    [comentarios] [varchar](300) NULL
)

INSERT INTO @entrevistasTemp ([id_usuario], [id_entrevista], [comentarios]) VALUES (12099,
    4515, CONVERT(TEXT, N'Riesgo muy alto.  Marun Victoria, '))
INSERT INTO @entrevistasTemp ([id_usuario], [id_entrevista], [comentarios]) VALUES (15347,
    4516, CONVERT(TEXT, N'Riesgo muy alto.  Marun Victoria, '))

UPDATE entrevistas 
    SET entrevistas.comentarios = et.comentarios 
    FROM @entrevistasTemp et
WHERE entrevistas.id = et.id_entrevista