Временная таблица против создания и удаления таблицы - PullRequest
1 голос
/ 18 января 2012

Я создаю таблицу «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,5 тыс. Строк

Ответы [ 3 ]

5 голосов
/ 18 января 2012

Создать временную таблицу вместо таблицы:

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
2 голосов
/ 18 января 2012

Ответ только в зависимости от размера вставляемых данных и частоты обращения к строкам.

Если у вас большой набор данных, вы можете создать таблицу для вставки данных в эту таблицу, затем выполнить индексацию в таблице и затем использоватьэту таблицу для любых дальнейших операций, а затем отбросьте таблицу.

Если размер данных ограничен.Тогда предпочтение будет отдано ответу aF.

1 голос
/ 18 января 2012

Даже лучше, чем временная таблица (если ваша версия 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
...