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