1

我正在创建一个表 "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 行

4

3 回答 3

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
于 2012-01-18T14:18:50.427 回答
2

仅根据插入的数据大小和访问行的频率来回答。

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

如果数据大小有限。然后由 aF 回答会更好。

于 2012-01-18T14:30:29.590 回答
1

甚至比临时表(如果您的 SQL Server 版本支持 [2005+])更好的是表变量。创建临时表时,SQL Server必须在运行时重新编译查询。表变量没有这个问题。它们也是在内存中而不是在磁盘上创建的,并且具有较少的锁定和事务日志争用问题

代码如下所示:

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
于 2012-01-18T15:10:45.537 回答