2016-12-13 6 views
1

Я пытаюсь написать вывод SQL Agent Job в текст или файл Excel или CSV.Вывод SQL Agent Job в форматировании текстового файла

Но он пишет все, что делает его очень огромным файлом с пробелами и строкой, как «-------» см. Ниже рис. Я попробовал обрезку, удалив специальные символы.

Вот моя работа.

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? –

+0

нет, в то время я получаю что-то вроде на первом экране – user2040021

+0

извините, что это не имеет смысла. Я бы попытался уменьшить ваш запрос, пока вы не сможете что-то правильно работать, а затем снова начнете добавлять поля. –

ответ

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 за это, он делает все в одной строке сейчас, но все еще есть эти ------------------------------- ------- и пробелы, и их много. Наверное, я могу работать с этим пока, пока мы не выясним, как позаботиться о выше «------» и «white Spaces» – user2040021

+0

На самом деле это сработало отлично, когда я пишу в SQL-файл. Еще раз спасибо. – user2040021