Mssql stuff: STUFF (Transact-SQL) — SQL Server

Содержание

Как вывести список заданий (job) в mssql – adminbd

use msdb
go
SELECT 
    [sJOB].[name] AS [JobName]
    , [sDBP].[name] AS [JobOwner]
    , [sCAT].[name] AS [JobCategory]
  , [sJOB].[description] AS [JobDescription]
    , [sJSTP].[step_id] AS [JobStartStepNo]
    , [sJSTP].[step_name] AS [JobStartStepName]
    , [sJOB].[date_created] AS [JobCreatedOn]
    , [sJOB].[date_modified] AS [JobLastModifiedOn]
  , CASE [sJOB].[enabled]
        WHEN 1 THEN 'Yes'
        WHEN 0 THEN 'No'
      END AS [IsEnabled]
       , CASE
          WHEN [sSCH].[schedule_uid] IS NULL THEN 'No'
          ELSE 'Yes'
          END AS [IsScheduled]
    , CASE 
        WHEN [freq_type] = 64 THEN 'Start automatically when SQL Server Agent starts'
        WHEN [freq_type] = 128 THEN 'Start whenever the CPUs become idle'
        WHEN [freq_type] IN (4,8,16,32) THEN 'Recurring'
        WHEN [freq_type] = 1 THEN 'One Time'
      END [ScheduleType]
    , CASE [freq_type]
        WHEN 1 THEN 'One Time'
        WHEN 4 THEN 'Daily'
        WHEN 8 THEN 'Weekly'
        WHEN 16 THEN 'Monthly'
        WHEN 32 THEN 'Monthly - Relative to Frequency Interval'
        WHEN 64 THEN 'Start automatically when SQL Server Agent starts'
        WHEN 128 THEN 'Start whenever the CPUs become idle'
      END [Occurrence]
    , CASE [freq_type]
        WHEN 4 THEN 'Occurs every ' + CAST([freq_interval] AS VARCHAR(3)) + ' day(s)'
        WHEN 8 THEN 'Occurs every ' + CAST([freq_recurrence_factor] AS VARCHAR(3)) 
                    + ' week(s) on '
                    + CASE WHEN [freq_interval] & 1 = 1 THEN 'Sunday' ELSE '' END
                    + CASE WHEN [freq_interval] & 2 = 2 THEN ', Monday' ELSE '' END
                    + CASE WHEN [freq_interval] & 4 = 4 THEN ', Tuesday' ELSE '' END
                    + CASE WHEN [freq_interval] & 8 = 8 THEN ', Wednesday' ELSE '' END
                    + CASE WHEN [freq_interval] & 16 = 16 THEN ', Thursday' ELSE '' END
                    + CASE WHEN [freq_interval] & 32 = 32 THEN ', Friday' ELSE '' END
                    + CASE WHEN [freq_interval] & 64 = 64 THEN ', Saturday' ELSE '' END
        WHEN 16 THEN 'Occurs on Day ' + CAST([freq_interval] AS VARCHAR(3)) 
                     + ' of every '
                     + CAST([freq_recurrence_factor] AS VARCHAR(3)) + ' month(s)'
        WHEN 32 THEN 'Occurs on '
                     + CASE [freq_relative_interval]
                        WHEN 1 THEN 'First'
                        WHEN 2 THEN 'Second'
                        WHEN 4 THEN 'Third'
                        WHEN 8 THEN 'Fourth'
                        WHEN 16 THEN 'Last'
                       END
                     + ' ' 
                     + CASE [freq_interval]
                        WHEN 1 THEN 'Sunday'
                        WHEN 2 THEN 'Monday'
                        WHEN 3 THEN 'Tuesday'
                        WHEN 4 THEN 'Wednesday'
                        WHEN 5 THEN 'Thursday'
                        WHEN 6 THEN 'Friday'
                        WHEN 7 THEN 'Saturday'
                        WHEN 8 THEN 'Day'
                        WHEN 9 THEN 'Weekday'
                        WHEN 10 THEN 'Weekend day'
                       END
                     + ' of every ' + CAST([freq_recurrence_factor] AS VARCHAR(3)) 
                     + ' month(s)'
      END AS [Recurrence]
    , CASE [freq_subday_type]
        WHEN 1 THEN 'Occurs once at ' 
                    + STUFF(
                 STUFF(RIGHT('000000' + CAST([active_start_time] AS VARCHAR(6)), 6)
                                , 3, 0, ':')
                            , 6, 0, ':')
        WHEN 2 THEN 'Occurs every ' 
                    + CAST([freq_subday_interval] AS VARCHAR(3)) + ' Second(s) between ' 
                    + STUFF(
                   STUFF(RIGHT('000000' + CAST([active_start_time] AS VARCHAR(6)), 6)
                                , 3, 0, ':')
                            , 6, 0, ':')
                    + ' & ' 
                    + STUFF(
                    STUFF(RIGHT('000000' + CAST([active_end_time] AS VARCHAR(6)), 6)
                                , 3, 0, ':')
                            , 6, 0, ':')
        WHEN 4 THEN 'Occurs every ' 
                    + CAST([freq_subday_interval] AS VARCHAR(3)) + ' Minute(s) between ' 
                    + STUFF(
                   STUFF(RIGHT('000000' + CAST([active_start_time] AS VARCHAR(6)), 6)
                                , 3, 0, ':')
                            , 6, 0, ':')
                    + ' & ' 
                    + STUFF(
                    STUFF(RIGHT('000000' + CAST([active_end_time] AS VARCHAR(6)), 6)
                                , 3, 0, ':')
                            , 6, 0, ':')
        WHEN 8 THEN 'Occurs every ' 
                    + CAST([freq_subday_interval] AS VARCHAR(3)) + ' Hour(s) between ' 
                    + STUFF(
                    STUFF(RIGHT('000000' + CAST([active_start_time] AS VARCHAR(6)), 6)
                                , 3, 0, ':')
                            , 6, 0, ':')
                    + ' & ' 
                    + STUFF(
                    STUFF(RIGHT('000000' + CAST([active_end_time] AS VARCHAR(6)), 6)
                                , 3, 0, ':')
                            , 6, 0, ':')
      END [Frequency]
    , [sSCH]. [name] AS [JobScheduleName]
    --,[sJSTP].database_name
   , Last_Run = CONVERT(DATETIME, RTRIM(run_date) + ' '
        + STUFF(STUFF(REPLACE(STR(RTRIM(h.run_time),6,0),
        ' ','0'),3,0,':'),6,0,':'))
  , case [sJSTP].Last_run_outcome
          When 0 then 'Failed'
          when 1 then 'Succeeded'
          When 2 then 'Retry'
          When 3 then 'Canceled'
          When 5 then 'Unknown'
   End as Last_Run_Status
  ,Last_Run_Duration_HHMMSS = STUFF(STUFF(REPLACE(STR([sJSTP].last_run_duration,7,0),
        ' ','0'),4,0,':'),7,0,':')
    , Max_Duration = STUFF(STUFF(REPLACE(STR(l.run_duration,7,0),
        ' ','0'),4,0,':'),7,0,':')
  , Next_Run= CONVERT(DATETIME, RTRIM(NULLIF([sJOBSCH].next_run_date, 0)) + ' '
        + STUFF(STUFF(REPLACE(STR(RTRIM([sJOBSCH].next_run_time),6,0),
        ' ','0'),3,0,':'),6,0,':'))
    , CASE [sJOB].[delete_level]
        WHEN 0 THEN 'Never'
        WHEN 1 THEN 'On Success'
        WHEN 2 THEN 'On Failure'
        WHEN 3 THEN 'On Completion'
      END AS [JobDeletionCriterion]
    , [sSVR]. [name] AS [OriginatingServerName]
    ,[sJSTP].subsystem
    ,[sJSTP].command
  ,h.message
FROM
    [msdb].[dbo].[sysjobs] AS [sJOB]
    LEFT JOIN [msdb].[sys].[servers] AS [sSVR]
        ON [sJOB].[originating_server_id] = [sSVR].[server_id]
    LEFT JOIN [msdb].[dbo].[syscategories] AS [sCAT]
        ON [sJOB].[category_id] = [sCAT].[category_id]
    LEFT JOIN [msdb].[dbo].[sysjobsteps] AS [sJSTP]
        ON [sJOB].[job_id] = [sJSTP].[job_id]
        AND [sJOB].[start_step_id] = [sJSTP].[step_id]
    LEFT JOIN [msdb].[sys].[database_principals] AS [sDBP]
        ON [sJOB].[owner_sid] = [sDBP].[sid]
    LEFT JOIN [msdb].[dbo].[sysjobschedules] AS [sJOBSCH]
        ON [sJOB].[job_id] = [sJOBSCH].[job_id]
    LEFT JOIN [msdb].[dbo].[sysschedules] AS [sSCH]
        ON [sJOBSCH].[schedule_id] = [sSCH].[schedule_id]
        left JOIN
    (
        SELECT job_id, instance_id = MAX(instance_id),max(run_duration) AS run_duration
            FROM msdb.dbo.sysjobhistory
            GROUP BY job_id
    ) AS l
    ON sJOB. job_id = l.job_id
left JOIN
    msdb.dbo.sysjobhistory AS h
    ON h.job_id = l.job_id
    AND h.instance_id = l.instance_id
ORDER BY [JobName]

Ниже приведено краткое описание каждого из полей, возвращаемых из указанного выше запроса:

  • [JobName]: имя задания агента SQL Server.
  • [JobOwner]: владелец задания.
  • [JobCategory]: категория, к которой относится задание, например моментальный снимок репликации, обслуживание базы данных, отправка журналов и т.д.
  • [JobDescription]: описание задания.
  • [JobStartStepNo]: номер шага, из которого задано задание для запуска. SQL Server позволяет нам выполнять несколько шагов в рамках задания и задания может начинаться с того, что пользователь хочет, чтобы он начинал с.
  • [JobStartStepName]: имя шага, с которого задание задано начать.
  • [JobCreatedOn]: дата и время создания задания.
  • [JobLastModifiedOn]: дата и время последнего изменения задания.
  • [IsEnabled]: индикатор, показывающий, включено ли задание или отключен.
  • [IsScheduled]: индикатор, указывающий, запланировано ли задание  или нет. Работы могут быть запланированы для запуска в указанный день (ы)  в указанное время или может быть вызван с помощью кода типа T-SQL и т.д.
  • [ScheduleType]: тип расписания.
  • [Возникновение]: появление графика, такого как Daily, Weekly,  Ежемесячно и т.д.
  • [Повторение]: повторение графика, например, определенного дня,  Специальные дни недели, количество недель и т.д.
  • [Частота]: как часто задание должно выполняться в день (ы), когда  он должен запускаться, например: Происходит только один раз в запланированном  день (ы), Происходит каждые 2 часа в назначенный день и т.д. между  указанное время начала и окончания.
  • [JobScheduleName]: имя расписания, связанного с заданием.  SQL Server позволяет нам связывать несколько расписаний с одним заданием,  в этом случае вышеупомянутый запрос возвращает одну строку для каждого  график, связанный с каждым заданием.
  • [Last_Run]: дата и время выполнения задания в последний раз  (соответствует самому последнему запуску).
  • [Last_Run_Status]: состояние или результат последнего запуска задания.
  • [Last_Run_Duration_HHMMSS]: Продолжительность последнего прогона, представленного в  Часы: Минуты: Формат секунд.
  • [Max_Duration]: максимальная продолжительность задания была выполнена в  Часы: Минуты: Формат секунд.
  • [Next_Run]: дата и время выполнения задания в следующий раз. Эта  информация доступна только для заданий, которые запланированы (a  расписание связано с заданием).
  • [JobDeletionCriterion]: критерий для удаления задания. SQL  Агент сервера имеет функцию, которая позволяет нам удалять/удалять задание  основанный на определенном критерии, так что нет необходимости вручную  удалять/очищать задания.
  • [OriginatingServerName]: сервер, с которого выполнялось задание.
  • [Подсистема]: тип операции, например, интеграция с SQL Server  Пакет услуг, Transact-SQL Script (T-SQL), ActiveX Script и т.д.
  • [Команда]: фактическая команда, которая будет выполнена  подсистема.
  • [сообщение]: информация о успехе/неудаче работы и т.д.

Similar Posts:

LinkedIn

選擇語言Bahasa Indonesia (Bahasa Indonesia)Bahasa Malaysia (Malay)Čeština (Czech)Dansk (Danish)Deutsch (German)English (English)Español (Spanish)繁體中文 (Chinese (Traditional))Français (French)한국어 (Korean)Italiano (Italian)简体中文 (Chinese (Simplified))Nederlands (Dutch)日本語 (Japanese)Norsk (Norwegian)Polski (Polish)Português (Portuguese)Română (Romanian)Русский (Russian)Svenska (Swedish)Tagalog (Tagalog)ภาษาไทย (Thai)Türkçe (Turkish)العربية (Arabic)

عفواً، لم نتمكن من العثور على الصفحة التي تبحث عنها. برجاء المحاولة مرة أخرى للصفحة السابقة أو الانتقال لـمركز المساعدة للمزيد من المعلومات

الإنتقال لموجزك الرئيسي

Omlouváme se, nemůžeme najít stránku, kterou hledáte. Zkuste se vrátit zpátky na předchozí stránku, nebo se podívejte do našeho Centra nápovědy pro více informací

Přejít do informačního kanálu

Vi kan desværre ikke finde den side, du leder efter.

Gå tilbage til den forrige side, eller besøg Hjælp for at få flere oplysninger

Gå til dit feed

Die gewünschte Seite konnte leider nicht gefunden werden. Versuchen Sie, zur vorherigen Seite zurückzukehren, oder besuchen Sie unseren Hilfebereich, um mehr zu erfahren.

Zu Ihrem Feed

Uh oh, we can’t seem to find the page you’re looking for. Try going back to the previous page or see our Help Center for more information

Go to your feed

Vaya, parece que no podemos encontrar la página que buscas. Intenta volver a la página anterior o visita nuestro Centro de ayuda para más información.

Ir a tu feed

Nous ne trouvons pas la page que vous recherchez. Essayez de retourner à la page précédente ou consultez notre assistance clientèle pour plus d’informations

Ouvrez votre fil

Maaf, sepertinya kami tidak dapat menemukan halaman yang Anda cari.

Coba kembali ke halaman sebelumnya atau lihat Pusat Bantuan kami untuk informasi lebih lanjut

Buka feed Anda

Non abbiamo trovato la pagina che stai cercando. Prova a tornare alla pagina precedente o visita il nostro Centro assistenza per saperne di più.

Vai al tuo feed

申し訳ありません。お探しのページが見つかりません。前のページに戻るか、ヘルプセンターで詳細をご確認ください

フィードに移動

원하시는 페이지를 찾을 수 없습니다. 이전 페이지로 돌아가거나 고객센터에서 자세히 알아보세요.

홈으로 가기

Harap maaf, kami tidak dapat menemui laman yang ingin anda cari. Cuba kembali ke laman sebelumnya atau lihat Pusat Bantuan kami untuk maklumat lanjut

Pergi ke suapan

De pagina waar u naar op zoek bent, kan niet worden gevonden. Probeer terug te gaan naar de vorige pagina of bezoek het Help Center voor meer informatie

Ga naar uw feed

Vi finner ikke siden du leter etter.

Gå tilbake til forrige side eller besøk vår brukerstøtte for mer informasjon

Gå til din feed

Nie możemy znaleźć strony, której szukasz. Spróbuj wrócić do poprzedniej strony lub nasze Centrum pomocy, aby uzyskać więcej informacji

Przejdź do swojego kanału

A página que você está procurando não foi encontrada. Volte para a página anterior ou visite nossa Central de Ajuda para mais informações

Voltar para seu feed

Ne pare rău, nu găsim pagina pe care o căutaţi. Reveniţi la pagina anterioară sau consultaţi Centrul nostru de asistenţă pentru mai multe informaţii

Accesaţi fluxul dvs.

Не удаётся найти искомую вами страницу. Вернитесь на предыдущую страницу или посетите страницу нашего справочного центра для получения дополнительной информации.

Перейти к ленте

Sidan du letar efter hittades inte.

Gå tillbaka till föregående sida eller besök vårt Hjälpcenter för mer information

Gå till ditt nyhetsflöde

ขออภัย ดูเหมือนเราไม่พบหน้าที่คุณกำลังมองหาอยู่ ลองกลับไปที่หน้าเพจก่อน หรือดู ศูนย์ความช่วยเหลือ ของเราสำหรับข้อมูลเพิ่มเติม

ไปที่ฟีดของคุณ

Naku, mukhang hindi namin mahanap ang pahina na hinahanap mo. Subukang bumalik sa nakaraang pahina o tingnan ang aming Help Center para sa higit pang impormasyon

Pumunta sa iyong feed

Aradığınız sayfa bulunamadı. Önceki sayfaya geri dönün veya daha fazla bilgi için Yardım Merkezimizi görüntüleyin

Haber akışınıza gidin

抱歉,无法找到页面。试试返回到前一页,或前往帮助中心了解更多信息

前往动态汇总

我們好像找不到該頁面。請回到上一頁或前往說明中心來進一步瞭解

前往首頁動態

sql server — запрос материала в SQL

спросил

Изменено
4 года, 3 месяца назад

Просмотрено
2к раз

У меня есть таблица, в которой хранится несколько значений для одного идентификатора. Таблица выглядит следующим образом:

Я хочу объединить значения, разделенные знаком «&».

Требуемый результат:

Мой запрос не дает желаемого результата. Ниже мой запрос:

 создать таблицу #temp (cid int, val1 int, val2 int, val3 int, val4 int)
  вставить значения #temp
    (1001,10,11,15,19),
    (1002,15,Нуль,16,18),
    (1003,14,18,15,НУЛЬ)
ВЫБЕРИТЕ отдельный t2.cid,
        STUFF(( SELECT '&' + REPLACE(t1.val1,'.','') +
                             ЗАМЕНИТЬ(t1.val2,'.','') +
                             ЗАМЕНИТЬ(t1.val3,'.','') +
                             ЗАМЕНИТЬ(t1.val4,'.','')
                ОТ #temp t1
                ГДЕ t1.cid = t2.cid
                ДЛЯ ПУТИ XML ('')
            ), 1, 1,'') как "выход"
        ОТ #temp t2
 

Примечание. Я использую SQL Server 2014

  • sql
  • sql-server

4

Для SQL Server 2017 вы можете использовать CONCAT_WS (дополнение к @Joakim Danielson):

 SELECT cid, CONCAT_WS('&', val1, val2, val3, val4)
ОТ #temp
 

Для SQL Server 2012 вы можете использовать CONCAT:

 SELECT cid, CONCAT(val1, '&', val2, '&', val3, '&', val4)
ОТ #temp
 

Для всех версий SQL Server вы можете использовать «+» для объединения.

 ВЫБРАТЬ cid, знач1 + '&' + знач2 + '&' + знач3 + '&' + знач4
ОТ #temp
 

Учитывая, что ваш пример включает NULL и, по-видимому, хранит целые числа, я бы рекомендовал следующее:

 SELECT cid
       ,STUFF(COALESCE('&' + CONVERT(VARCHAR, val1), '')
             + ОБЪЕДИНИТЬ('&' + ПРЕОБРАЗОВАТЬ(VARCHAR, val2), '')
             + ОБЪЕДИНИТЬ('&' + ПРЕОБРАЗОВАТЬ(VARCHAR, val3), '')
             + ОБЪЕДИНИТЬ('&' + ПРЕОБРАЗОВАТЬ(VARCHAR, val4), ''), 1, 1, '')
ОТ #temp
 

* Принято редактирование, чтобы включить STUFF для удаления завершающего ‘&’

COALESCE() не будет включать значения NULL в ваш список, в то время как CONVERT to varchar будет обрабатывать целые числа

7

Вам нужна функциональность concat_ws() . Вы можете сделать это в SQL Server следующим образом:

 выберите t.cid,
       материал((объединить('&' + t.val1, '') +
               объединить('&' + t.val2, '') +
               объединить('&' + t. val3, '') +
               объединить('&' + t.val4, '')
              ), 1, 1, ''
            ) как вальс
из #temp т;
 

Это самый удобный эквивалент concat_ws() , который я нашел в SQL Server.

Если значения целые, просто приведите их:

 выберите t.cid,
       stuff((coalesce('&' + cast(t.val1 as varchar(255)), '') +
               объединение ('&' + приведение (t.val2 как varchar (255)), '') +
               объединение ('&' + приведение (t.val3 как varchar (255)), '') +
               объединение ('&' + приведение (t.val4 как varchar (255)), '')
              ), 1, 1, ''
            ) как вальс
из #temp т;
 

Вот скрипка db<>.

2

Используйте для этого CONCAT_WS

 SELECT cid, CONCAT_WS('&', val1, val2, val3, val4)
ОТ #temp
 

2

У меня есть таблица, в которой хранится несколько значений для одного идентификатора.

Если значения CID не уникальны:

 SELECT DISTINCT
       т2. цид,
       ЗАМЕНИТЬ(МАТЕРИАЛ(
       (
           ВЫБЕРИТЕ '|' + CAST(val AS VARCHAR(50))
           ОТ
           (
               ВЫБЕРИТЕ cid, val1 AS val FROM #temp
               СОЮЗ ВСЕХ
               ВЫБЕРИТЕ cid, val2 AS val FROM #temp
               СОЮЗ ВСЕХ
               ВЫБЕРИТЕ cid, val3 AS val FROM #temp
               СОЮЗ ВСЕХ
               ВЫБЕРИТЕ cid, val4 AS val FROM #temp
           ) т1
           ГДЕ t1.cid = t2.cid
                 И t1.val НЕ NULL
           ДЛЯ ПУТИ XML('')
       ), 1, 1, ''), '|', '&') КАК 'выход'
ОТ #temp t2;
 

Результаты для:

 вывод cid
1001 10, 11, 15, 19
1002 15, 16, 18
1003 14, 18, 15
 

В противном случае CONCAT или CONCAT_WS , как правильно предложили другие участники, является более элегантным решением

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Обязательно, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

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

SQL SERVER STUFF FUNCTION СЦЕНАРИЙ

спросил

Изменено
4 года, 10 месяцев назад

Просмотрено
1к раз

В SQL Server у меня есть такая таблица:

 Кол-1 Кол-2 Кол-3
------------------------
А 123 25,13
А 456 67,00
А 789 81,89
 

Я хочу выводить так:

 Col-1 Col-2 Col-3
--------------------------------------------------
А 123 456 789 174,02
 
  • sql
  • sql-сервер
  • sql-сервер-2012

3

Вы можете использовать предложение FOR XML с STUFF() 9Функция 0058:

 выберите co1, stuff((выберите отдельный ','+cast (t1.col2 как varchar (255))
                    из таблицы t1
                    где t1. col1 = t.col1
                    для XML-пути ('')
                    ), 1, 1, ''
                 ) как col2,
       сумма (столбец3)
из таблицы т
сгруппировать по co1;
 

1

Пример данных:

 DECLARE @T TABLE(Col1 VARCHAR(1),
                 Col2 INT,
                 Col3 FLOAT)
ВСТАВИТЬ В @T( Col1, Col2, Col3 )
ЗНАЧЕНИЯ ('A',123,25.13),('A',456,67),('A',789,81,89)
 

Запрос :

 ;С ключами КАК (ВЫБРАТЬ Col1,
                      СУММ(Col3) КАК Col3
               ОТ @T
               СГРУППИРОВАТЬ ПО Col1)
ВЫБЕРИТЕ ключи.Col1,
       REPLACE(REPLACE(REPLACE( CONVERT (NVARCHAR(MAX),(SELECT T.Col2 AS A
        ОТ @T КАК Т
        ГДЕ T.Col1 = Keys.Col1
        FOR XML PATH(''))),'',','),'',''),'','') AS Col2,
        Ключи.Col3
ОТ ключей
 

Результат:

 Col1 Col2 Col3
123 456 789174.02
 

1

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

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