0

データを継続的に生成して供給するソフトウェアを使用しています。このデータは私自身のソフトウェアで表示され、レポート生成 (利用可能なオプション) を使用して抽出できます。

データ ストレージの制限は 500 行であるため、500 行のデータごとにレポートを使用して抽出し、SQL Server を開いて使用truncate (table_name)および実行して削除する必要があります。

500 行ごとにデータを抽出し、そのデータを定義された場所に保存してから、ベース テーブルをクリア (切り捨て) する SQL コマンドが必要です。

4

1 に答える 1

0

stored procSQL Server では、 usingIF... ELSEコンストラクトでこれを行うことができます。これは、構造の使用方法を説明するMSDNドキュメントです...

カウント部分は次のようになります-

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

データの保存部分には、コマンド を使用できますbcpTransact-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
于 2016-12-05T15:30:32.630 に答える