1

テーブル「InterviewTemp」を作成し、そこにデータを挿入し、そのデータで2番目のテーブルを更新してから、「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+]をサポートしている場合)よりもさらに優れているのは、テーブル変数です。一時テーブルを作成する場合、SQLServerは実行時にクエリを再コンパイルする必要があります。テーブル変数にはこの問題はありません。また、ディスクではなくメモリに作成され、ロックやトランザクションログの競合の問題が少なくなります

コードは次のようになります。

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 に答える