Не мог бы кто то пояснить следующие детали:
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".
Ни хрена я не могу понять использование этих долбаных кавычек, может кто то пояснить?
Почему я должен в 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
Opium, тут задача метнуть что то в почту. Чтобы оно приходило в болeе читаемом виде чем вот так.
database_name logical_file_name
size_mb max_size_mb
-------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------
- ----------- -----------
bp bp_Data
3182 unlimited
bp bp_Log
3518 30000
Хотя тема с Экселем тоже интересная но для других задач. На карандаш.
Что гуглить по powershell в этом направлении?
ОК, будем копать, интересно же.
я бы всё решал на уровне сиквела теми или иными средствами (дада, я намекаю на репортинг или эксель)
можно захардкодить оболочку 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