, когда я выполнил это, на первой скорости было хорошо, но сейчас это занимает много времени, а скорость очень низкая Я не знаю почему, но я думаю, что мне следует очистить кеш.
Я хочу сказать, занимает около 1 дня, но еще не финиширует на 20%.
на самом деле это около SELECT
в TABLE
в базе данных [spt]
и INSERT
в другой базе данных [AB_Warehouse]
, но оба они находятся на одном сервере.
Обратите внимание: один файл хранится в базе данных [spt]
у нас есть такие данные
«aa + tt + bb + rr + yy», и я разделился с помощью функции StringSplitXML
, и каждый из них вставил в [Workspaces_Tbl]
Level1 ... 15
это мой запрос:
USE [spt]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
BEGIN
DECLARE @ID decimal(20, 0);
DECLARE @parent_id decimal(20, 0);
DECLARE @Type int;
DECLARE @workspacetype_id decimal(10, 0);
DECLARE @isvirtual decimal(1, 0);
DECLARE @enable decimal(1, 0);
DECLARE @Level1 nvarchar(MAX);
DECLARE @Level2 nvarchar(MAX);
DECLARE @Level3 nvarchar(MAX);
DECLARE @Level4 nvarchar(MAX);
DECLARE @Level5 nvarchar(MAX);
DECLARE @Level6 nvarchar(MAX);
DECLARE @Level7 nvarchar(MAX);
DECLARE @Level8 nvarchar(MAX);
DECLARE @Level9 nvarchar(MAX);
DECLARE @Level10 nvarchar(MAX);
DECLARE @Level11 nvarchar(MAX);
DECLARE @Level12 nvarchar(MAX);
DECLARE @Level13 nvarchar(MAX);
DECLARE @Level14 nvarchar(MAX);
DECLARE @Level15 nvarchar(MAX);
DECLARE @titles_tmp nvarchar(MAX);
DECLARE @cont_spilit_tittle int;
DECLARE @parent_titles_tmp nvarchar(MAX);
DECLARE @cont_tmp int;
DECLARE @cont int;
SELECT @cont = COUNT(*) FROM septa.dbo.workspaces;
SET @cont_tmp = 0;
While(@cont_tmp<@cont)
BEGIN
SET @ID = (SELECT spt.dbo.workspaces.workspace_id FROM septa.dbo.workspaces ORDER BY workspace_id ASC OFFSET @cont_tmp ROWS FETCH NEXT 1 ROWS ONLY)
SET @parent_id = (SELECT septa.dbo.workspaces.parent_id FROM septa.dbo.workspaces ORDER BY workspace_id ASC OFFSET @cont_tmp ROWS FETCH NEXT 1 ROWS ONLY)
SET @workspacetype_id = (SELECT septa.dbo.workspaces.workspacetype_id FROM septa.dbo.workspaces ORDER BY workspace_id ASC OFFSET @cont_tmp ROWS FETCH NEXT 1 ROWS ONLY)
SET @isvirtual = (SELECT septa.dbo.workspaces.isvirtual FROM septa.dbo.workspaces ORDER BY workspace_id ASC OFFSET @cont_tmp ROWS FETCH NEXT 1 ROWS ONLY)
SET @enable = (SELECT septa.dbo.workspaces.enable FROM septa.dbo.workspaces ORDER BY workspace_id ASC OFFSET @cont_tmp ROWS FETCH NEXT 1 ROWS ONLY)
SET @titles_tmp = (SELECT septa.dbo.workspaces.title FROM septa.dbo.workspaces ORDER BY workspace_id ASC OFFSET @cont_tmp ROWS FETCH NEXT 1 ROWS ONLY)
SET @parent_titles_tmp = (SELECT septa.dbo.workspaces.parent_titles FROM septa.dbo.workspaces ORDER BY workspace_id ASC OFFSET @cont_tmp ROWS FETCH NEXT 1 ROWS ONLY)
IF OBJECT_ID('tempdb..#MyTempTable') IS NOT NULL DROP TABLE #MyTempTable
SELECT IDENTITY(int, 1, 1) AS 'RowID',* into #MyTempTable
FROM StringSplitXML(@parent_titles_tmp,'+')
insert into #MyTempTable VALUES (@titles_tmp)
SET @cont_spilit_tittle = (SELECT COUNT(*) FROM #MyTempTable)
IF(@cont_spilit_tittle<0)SET @cont_spilit_tittle = 1
SET @Type = @cont_spilit_tittle
WHILE(@cont_spilit_tittle < 15)
BEGIN
insert into #MyTempTable VALUES ('')
SET @cont_spilit_tittle = CAST(@cont_spilit_tittle AS INT) + 1
END
SET @Level1 = (SELECT Value FROM #MyTempTable ORDER BY RowID ASC OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY)
SET @Level2 = (SELECT Value FROM #MyTempTable ORDER BY RowID ASC OFFSET 1 ROWS FETCH NEXT 1 ROWS ONLY)
SET @Level3 = (SELECT Value FROM #MyTempTable ORDER BY RowID ASC OFFSET 2 ROWS FETCH NEXT 1 ROWS ONLY)
SET @Level4 = (SELECT Value FROM #MyTempTable ORDER BY RowID ASC OFFSET 3 ROWS FETCH NEXT 1 ROWS ONLY)
SET @Level5 = (SELECT Value FROM #MyTempTable ORDER BY RowID ASC OFFSET 4 ROWS FETCH NEXT 1 ROWS ONLY)
SET @Level6 = (SELECT Value FROM #MyTempTable ORDER BY RowID ASC OFFSET 5 ROWS FETCH NEXT 1 ROWS ONLY)
SET @Level7 = (SELECT Value FROM #MyTempTable ORDER BY RowID ASC OFFSET 6 ROWS FETCH NEXT 1 ROWS ONLY)
SET @Level8 = (SELECT Value FROM #MyTempTable ORDER BY RowID ASC OFFSET 7 ROWS FETCH NEXT 1 ROWS ONLY)
SET @Level9 = (SELECT Value FROM #MyTempTable ORDER BY RowID ASC OFFSET 8 ROWS FETCH NEXT 1 ROWS ONLY)
SET @Level10 = (SELECT Value FROM #MyTempTable ORDER BY RowID ASC OFFSET 9 ROWS FETCH NEXT 1 ROWS ONLY)
SET @Level11 = (SELECT Value FROM #MyTempTable ORDER BY RowID ASC OFFSET 10 ROWS FETCH NEXT 1 ROWS ONLY)
SET @Level12 = (SELECT Value FROM #MyTempTable ORDER BY RowID ASC OFFSET 11 ROWS FETCH NEXT 1 ROWS ONLY)
SET @Level13 = (SELECT Value FROM #MyTempTable ORDER BY RowID ASC OFFSET 12 ROWS FETCH NEXT 1 ROWS ONLY)
SET @Level14 = (SELECT Value FROM #MyTempTable ORDER BY RowID ASC OFFSET 13 ROWS FETCH NEXT 1 ROWS ONLY)
SET @Level15 = (SELECT Value FROM #MyTempTable ORDER BY RowID ASC OFFSET 14 ROWS FETCH NEXT 1 ROWS ONLY)
INSERT INTO [AB_Warehouse].[dbo].[Workspaces_Tbl]
([ID]
,[parent_id]
,[Type]
,[workspacetype_id]
,[isvirtual]
,[enable]
,[Level1]
,[Level2]
,[Level3]
,[Level4]
,[Level5]
,[Level6]
,[Level7]
,[Level8]
,[Level9]
,[Level10]
,[Level11]
,[Level12]
,[Level13]
,[Level14]
,[Level15])
VALUES
(
@ID,
@parent_id,
@Type,
@workspacetype_id,
@isvirtual,
@enable,
@Level1,
@Level2,
@Level3,
@Level4,
@Level5,
@Level6,
@Level7,
@Level8,
@Level9,
@Level10,
@Level11,
@Level12,
@Level13,
@Level14,
@Level15
)
SET @cont_tmp = CAST(@cont_tmp AS INT) + 1
END
RETURN
END