我正在使用一种可以连续生成和提供数据的软件。此数据显示在我自己的软件中,可以使用报告生成(可用选项)提取。
数据存储的限制是500行,所以每500行数据后,我必须使用报表提取,然后打开SQL Server并使用truncate (table_name)
并执行它来删除它。
我想要一个 SQL 命令,它在每 500 行之后提取数据并将该数据保存在定义的位置,然后清除(截断)基表。
我正在使用一种可以连续生成和提供数据的软件。此数据显示在我自己的软件中,可以使用报告生成(可用选项)提取。
数据存储的限制是500行,所以每500行数据后,我必须使用报表提取,然后打开SQL Server并使用truncate (table_name)
并执行它来删除它。
我想要一个 SQL 命令,它在每 500 行之后提取数据并将该数据保存在定义的位置,然后清除(截断)基表。
在 SQL Server 中,您可以在stored proc
usingIF... 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