Автор Тема: Вопросы по T-SQL  (Прочитано 5993 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Онлайн Triangle

  • Модераторы
  • Олдфаг
  • *****
  • Сообщений: 7128
  • Рейтинг: 48
  • Пол: Мужской
  • Откуда: замкадыш
Вопросы по T-SQL
« : 17 января 2019, 07:43:06 »
Не мог бы кто то пояснить следующие детали:

EXEC msdb.dbo.sp_send_dbmail  
    @profile_name = Report, 
    @recipients = 'psa@prin.ru', 
    @query = 'sp_helpdb master' , 
    @subject = test, 
    @attach_query_result_as_file = 1 ;

1. Вот эта конструкция в итоге работает, но чего я не могу понять в синтаксисе. Почему я должен в 3 и 4 строках использовать символ ' причем обязательно, а остальным это не требуется?

SELECT DB_NAME(database_id) AS database_name
        , database_id
        , [file_id]
    , type_desc
    , data_space_id
    , name AS logical_file_name
    , physical_name
        , (SIZE*8/1024) AS size_mb
        , CASE max_size
                WHEN -1 THEN 'unlimited'
                ELSE CAST((CAST (max_size AS BIGINT)) * 8 / 1024 AS VARCHAR(10))
        END AS max_size_mb
    , CASE is_percent_growth
                WHEN 1 THEN CAST(growth AS VARCHAR(3)) + ' %'
                WHEN 0 THEN CAST(growth*8/1024 AS VARCHAR(10)) + ' mb'
        END AS growth_increment
    , is_percent_growth
FROM sys.master_files
ORDER BY 1, type_desc DESC, [file_id];

2. Вот этот скрипт прекрасно делает табличку с размерами всех файлов БД на сервере.
Но если я подсуну его внутрь первого вместо простейшего sp_helpdb master то получу отлуп:
Сообщение 102, уровень 15, состояние 1, строка 13
Неправильный синтаксис около конструкции "unlimited".

Ни хрена я не могу понять использование этих долбаных кавычек, может кто то пояснить?
Тетрис научил нас жизненно важному пониманию, успехи исчезают, ошибки накапливаются.

Оффлайн Opium

  • Старожил
  • ****
  • Сообщений: 507
  • Рейтинг: 19
  • Пол: Мужской
    • Просмотр профиля
  • Откуда: Мск
Вопросы по T-SQL
« Ответ #1 : 17 января 2019, 08:01:59 »
Почему я должен в 3 и 4 строках использовать символ ' причем обязательно, а остальным это не требуется

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

Неправильный синтаксис около конструкции "unlimited".

угу, потому что тебе надо задвоить апострофы внутри запроса при передаче его в переменную - он как строка передаётся, соответственно первый апостроф открывает строку, следующий апостроф перед unlimited закрывает строку и анализатор кода дальше офигивает,
тоесть у тебя оно должно выглядеть так

 @query = 'SELECT DB_NAME(database_id) AS database_name
        , database_id
        , [file_id]
    , type_desc
    , data_space_id
    , name AS logical_file_name
    , physical_name
        , (SIZE*8/1024) AS size_mb
        , CASE max_size
                WHEN -1 THEN ''unlimited''
                ELSE CAST((CAST (max_size AS BIGINT)) * 8 / 1024 AS VARCHAR(10))
        END AS max_size_mb
    , CASE is_percent_growth
                WHEN 1 THEN CAST(growth AS VARCHAR(3)) + '' %''
                WHEN 0 THEN CAST(growth*8/1024 AS VARCHAR(10)) + '' mb''
        END AS growth_increment
    , is_percent_growth
FROM sys.master_files
ORDER BY 1, type_desc DESC, [file_id];' , 
    @subject = 'test', 
    @attach_query_result_as_file = 1

Онлайн Triangle

  • Модераторы
  • Олдфаг
  • *****
  • Сообщений: 7128
  • Рейтинг: 48
  • Пол: Мужской
  • Откуда: замкадыш
Вопросы по T-SQL
« Ответ #2 : 17 января 2019, 08:25:03 »
Спасибо, более менее понял.


Updated: 17 January 2019, 08:53:51

Попутно спрошу, а есть ли какие то методы чтобы в почту оно пришло не текстом а какой то читаемой таблицей?
« Последнее редактирование: 17 января 2019, 08:53:51 от Triangle »
Тетрис научил нас жизненно важному пониманию, успехи исчезают, ошибки накапливаются.

Онлайн klarkin

  • Начинающий
  • *
  • Сообщений: 39
  • Рейтинг: 1
  • Пол: Мужской
    • Просмотр профиля
  • Откуда: Из маминой...
Вопросы по T-SQL
« Ответ #3 : 17 января 2019, 20:32:41 »
В HTML отправляй. http://codemonkeydeveloper.blogspot.com/2018/03/html-database-mail-ms-sql.html

P.S. Для кириллицы возможен секс с кодировками.
"Мы похвалили её за принципиальность. Побольше бы таких." ©

Оффлайн Opium

  • Старожил
  • ****
  • Сообщений: 507
  • Рейтинг: 19
  • Пол: Мужской
    • Просмотр профиля
  • Откуда: Мск
Вопросы по T-SQL
« Ответ #4 : 18 января 2019, 08:57:07 »
да, можно в HTML
в целом, если это для себя, то наверное проще настроить в экселе подключение к сиквелу и всегда иметь под рукой свежую инфу
(https://www.erpsoftwareblog.com/2017/01/microsoft-excel-connections-sql-databases/)
или оформить это в powershell и складировать в CSV/XLSX
или поднять репортинг и будет хорошо
или графану и ввернуть табличное отображение


Онлайн Triangle

  • Модераторы
  • Олдфаг
  • *****
  • Сообщений: 7128
  • Рейтинг: 48
  • Пол: Мужской
  • Откуда: замкадыш
Вопросы по T-SQL
« Ответ #5 : 18 января 2019, 11:10:44 »
Opium, тут задача метнуть что то в почту. Чтобы оно приходило в болeе читаемом виде чем вот так.
database_name                                                                                                                    logical_file_name                                                                                                              
  size_mb     max_size_mb
-------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------
- ----------- -----------
bp                                                                                                                               bp_Data                                                                                                                       
         3182 unlimited 
bp                                                                                                                               bp_Log                                                                                                                         
         3518 30000     


Хотя тема с Экселем тоже интересная но для других задач. На карандаш.

Что гуглить по powershell в этом направлении?
Тетрис научил нас жизненно важному пониманию, успехи исчезают, ошибки накапливаются.

Онлайн Retif

  • Администраторы
  • Олдфаг
  • *****
  • Сообщений: 9059
  • Рейтинг: 88
  • Пол: Мужской
  • Афтар
    • Просмотр профиля
    • Мой блог
  • Откуда: Орёл
Вопросы по T-SQL
« Ответ #6 : 18 января 2019, 11:46:13 »
Что гуглить по powershell в этом направлении?
Export-Csv, Out-File, например.


Updated: 18 January 2019, 11:49:16

Цитировать
Out-File -Encoding utf32
Позволит тебе полученный файл нормально в экселе открыть.

Онлайн Triangle

  • Модераторы
  • Олдфаг
  • *****
  • Сообщений: 7128
  • Рейтинг: 48
  • Пол: Мужской
  • Откуда: замкадыш
Вопросы по T-SQL
« Ответ #7 : 18 января 2019, 15:39:47 »
Export-Csv, Out-File, например.
это я знаю, я не понимаю как его скрестить с выводом T-SQL и пересылкой средствами msdb.dbo.sp_send_dbmail
Тетрис научил нас жизненно важному пониманию, успехи исчезают, ошибки накапливаются.

Онлайн Retif

  • Администраторы
  • Олдфаг
  • *****
  • Сообщений: 9059
  • Рейтинг: 88
  • Пол: Мужской
  • Афтар
    • Просмотр профиля
    • Мой блог
  • Откуда: Орёл
Вопросы по T-SQL
« Ответ #8 : 18 января 2019, 15:43:47 »
Вот тут не подскажу, не работал. Но где-то отсюда что-то, судя по всему: https://docs.microsoft.com/ru-ru/powershell/module/sqlserver/?view=sqlserver-ps


Updated: 18 January 2019, 15:45:03

Наверно  ???

Онлайн Triangle

  • Модераторы
  • Олдфаг
  • *****
  • Сообщений: 7128
  • Рейтинг: 48
  • Пол: Мужской
  • Откуда: замкадыш
Вопросы по T-SQL
« Ответ #9 : 18 января 2019, 15:52:43 »
ОК, будем копать, интересно же.
Тетрис научил нас жизненно важному пониманию, успехи исчезают, ошибки накапливаются.

Оффлайн Opium

  • Старожил
  • ****
  • Сообщений: 507
  • Рейтинг: 19
  • Пол: Мужской
    • Просмотр профиля
  • Откуда: Мск
Вопросы по T-SQL
« Ответ #10 : 18 января 2019, 16:35:43 »
ОК, будем копать, интересно же.

я бы всё решал на уровне сиквела теми или иными средствами (дада, я намекаю на репортинг или эксель)
можно захардкодить оболочку HTML в код, как писал Кларкин, а можно извратиться (но это трешак конечно=) ):
там в итоговом файле есть немного паразитных столбцов, вероятно они убираются на уровне конверта в HTML - это уже творческое вобщем

$server = "dfgdfgdg\dfgdfgdg"

$query = "SELECT
  DB_NAME(database_id) AS database_name
        , database_id
        , [file_id]
, type_desc
, data_space_id
, name AS logical_file_name
, physical_name
        , (SIZE*8/1024) AS size_mb
        , CASE max_size
                WHEN -1 THEN 'unlimited'
                ELSE CAST((CAST (max_size AS BIGINT)) * 8 / 1024 AS VARCHAR(10))
  END AS max_size_mb
, CASE is_percent_growth
                WHEN 1 THEN CAST(growth AS VARCHAR(3)) + ' %'
                WHEN 0 THEN CAST(growth*8/1024 AS VARCHAR(10)) + ' mb'
          END AS growth_increment
, is_percent_growth
FROM sys.master_files
ORDER BY 1, type_desc DESC, [file_id];"

$query1 = "EXEC msdb.dbo.sp_send_dbmail 
    @profile_name = 'sqlpython', 
    @recipients = 'dfgdgdg@dfgdfgdfg', 
    @subject = 'test',
@file_attachments = 'E:\test\test.html'"

Invoke-Sqlcmd -ServerInstance $server -Query $query | ConvertTo-Html | Out-File "E:\test\test.html"
Invoke-Sqlcmd -ServerInstance $server -Query $query1

Онлайн Triangle

  • Модераторы
  • Олдфаг
  • *****
  • Сообщений: 7128
  • Рейтинг: 48
  • Пол: Мужской
  • Откуда: замкадыш
Вопросы по T-SQL
« Ответ #11 : 18 января 2019, 16:38:57 »
Opium, репортинг если я правильно понял это SSRS, клево но это же на Камазе за грибами и денег же стоит.

По коду понял, спасибо, буду проверять.
Тетрис научил нас жизненно важному пониманию, успехи исчезают, ошибки накапливаются.

Оффлайн Opium

  • Старожил
  • ****
  • Сообщений: 507
  • Рейтинг: 19
  • Пол: Мужской
    • Просмотр профиля
  • Откуда: Мск
Вопросы по T-SQL
« Ответ #12 : 18 января 2019, 16:57:48 »
епортинг если я правильно понял это SSRS, клево но это же на Камазе за грибами и денег же стоит.

ну-у... у меня экспресса под рукой нет, проверять надо, но тем не менее мсдн говорит, что ssrs есть даже в экспрессе, с ограничениями конечно, но тем не менее
https://docs.microsoft.com/ru-ru/sql/reporting-services/reporting-services-features-supported-by-the-editions-of-sql-server-2016?view=sql-server-2017&viewFallbackFrom=sql-server-2014

Онлайн Triangle

  • Модераторы
  • Олдфаг
  • *****
  • Сообщений: 7128
  • Рейтинг: 48
  • Пол: Мужской
  • Откуда: замкадыш
Вопросы по T-SQL
« Ответ #13 : 18 января 2019, 18:35:18 »
2008, ок, я почему то думал оно за деньги. https://www.microsoft.com/ru-ru/download/details.aspx?id=24085 Надо тащить. Сейчас у меня большой погром будет на том серваке, а через неделю займусь.
Тетрис научил нас жизненно важному пониманию, успехи исчезают, ошибки накапливаются.