Команда SQL, которая извлекает данные после каждых 500 строк и сохраняет их в нужном месте, а затем очищает (усекает)

Я использую программное обеспечение, которое генерирует и передает данные непрерывно. Эти данные отображаются в моем собственном программном обеспечении и могут быть извлечены с помощью генерации отчетов (опция доступна).

Предел хранения данных составляет 500 строк, поэтому после каждых 500 строк данных мне нужно извлечь с помощью отчета, а затем открыть SQL Server и использовать truncate (table_name) и выполнить его, чтобы удалить его.

Мне нужна команда SQL, которая извлекает данные после каждых 500 строк и сохраняет эти данные в определенном месте, а затем очищает (усекает) базовую таблицу.

1 ответ

В SQL Server вы можете сделать это в stored proc с помощью IF... ELSE построить. Вот документация MSDN, которая объясняет, как использовать конструкцию...

Счетная часть будет выглядеть так:

IF ((SELECT COUNT(PC.id) FROM [server08].[db01].[dbo].[tblesrc01] PC) > 500) 
    BEGIN
        TRUNC ... 
        INSERT ...
    END

И для сохранения части данных: вы можете использовать bcp команда. Это позволяет экспортировать набор результатов из Transact-SQL заявление к data file, Оператор Transact-SQL может быть любым допустимым оператором, который возвращает набор результатов, например распределенный запрос или оператор SELECT, объединяющий несколько таблиц.

В следующем примере экспортируются имена из таблицы AdventureWorks2008R2 Person.Person в файл данных Contacts.txt. Имена упорядочены по фамилии, а затем по имени. Пример выполняется из командной строки Microsoft Windows:

bcp "SELECT FirstName, LastName FROM AdventureWorks2008R2.Person.Person ORDER BY LastName, Firstname" queryout Contacts.txt -c -T 

Выполнение bcp внутри хранимой процедуры

DECLARE @job NVARCHAR(100)
SET @job ='execute_bcp' 

EXEC msdb..sp_add_job @job_name = @job, 
  @description = 'Execute bcp command', 
  @owner_login_name = 'sa',
  @delete_level = 1

EXEC msdb..sp_add_jobstep @job_name = @job,
  @step_id = 1,
  @step_name ='Command Shell Execution', @subsystem = 'CMDEXEC',
  @command = 'bcp "SELECT Name FROM [DatabaseName].[dbo].[Employees]" queryout "filepath.txt" -c -T',
  @on_success_action =1

EXEC msdb..sp_add_jobserver @job_name =@job

EXEC msdb..sp_start_job @job_name = @job
Другие вопросы по тегам