2016-12-13 11 views
1

SQLエージェントジョブの出力をテキストファイルまたはExcelファイルまたはCSVファイルに書き込もうとしています。テキストファイル形式のSQLエージェントジョブ出力

しかし、それは非常に巨大なファイルであり、空白と '-------'のような行を作っています。下の図を参照してください。私は特殊文字を削除するトリミングを試みた。

ここは私の仕事です。

Select data.BlockingSessionID,data.VictimSessionID,LTRIM(RTRIM(data.BlockingQuery)),LTRIM(RTRIM(data.VictimQuery)),data.WaitDurationSecond,data.WaitType,data.BlockingQueryCompletePercent 

from(
SELECT 
    blocking_session_id AS BlockingSessionID, 
    session_id AS VictimSessionID, 

    (SELECT [text] FROM sys.sysprocesses 
     CROSS APPLY sys.dm_exec_sql_text([sql_handle]) 
     WHERE spid = blocking_session_id) AS BlockingQuery, 

    [text] AS VictimQuery, 
    wait_time/1000 AS WaitDurationSecond, 
    wait_type AS WaitType, 
    percent_complete AS BlockingQueryCompletePercent 
FROM sys.dm_exec_requests 
CROSS APPLY sys.dm_exec_sql_text([sql_handle]) 
WHERE blocking_session_id > 0) data 

ここでは、犠牲者とブロックのクエリ全体がスペースで区切られたスクリーンショットまたはファイルを示します。

これは、ファイルに書き込むときの様子をいくつかのスクリーンショットです。これはロックが発生したときの結果です。これをテキストファイルに書きたいのですが、何千もの空白で書き込みます。下の図を参照してください。

enter image description here

実際のテキストファイル、 enter image description here

enter image description here

enter image description here

+1

SQL Serverエージェントを使用せずにクエリを実行すると、同じ結果になりますか? –

+0

いいえ、その時私は最初の画面のようなものを得ます – user2040021

+0

申し訳ありませんが意味を成していません。私は、あなたが何かを正しく働かせるようになるまであなたの質問を減らしてから、フィールドをもう一度加えることを試みるでしょう。 –

答えて

1

は、手動でこれを回避する1つの文字列としてあなたの出力をフォーマットします。例:

Select cast(data.BlockingSessionID as varchar(max)) + '||' + 
    cast(data.VictimSessionID as varchar(max) + '||' + 
    LTRIM(RTRIM(data.BlockingQuery)) + '||' + 
    LTRIM(RTRIM(data.VictimQuery)) + '||' + 
    CAST(data.WaitDurationSecond as varchar(max)) + '||' + 
    data.WaitType + '||' + 
    Cast(data.BlockingQueryCompletePercent as varchar(max)) 
from(
SELECT 
    blocking_session_id AS BlockingSessionID, 
    session_id AS VictimSessionID, 




    (SELECT [text] FROM sys.sysprocesses 
     CROSS APPLY sys.dm_exec_sql_text([sql_handle]) 
     WHERE spid = blocking_session_id) AS BlockingQuery, 

    [text] AS VictimQuery, 
    wait_time/1000 AS WaitDurationSecond, 
    wait_type AS WaitType, 
    percent_complete AS BlockingQueryCompletePercent 
FROM sys.dm_exec_requests 
CROSS APPLY sys.dm_exec_sql_text([sql_handle]) 
WHERE blocking_session_id > 0) data 
+0

これに対して、@ laughing Vergilに感謝します。今は1行ですべてを行いますが、まだそれらはあります。------------------------------- -------と白いスペースとそれらはたくさんあります。 – user2040021

+0

実際には、SQLファイルに書き込むときに完璧に機能しました。再度、感謝します。 – user2040021