DBA.usp_SendMail
yordamDB-11 · değişiklik 11.10.2026 · Obje aramaya dön
İfadeler
2 ifade ·
391 çalışma ·
toplam 0,4 sn
| Sorgu (query_hash) | Çalışma | Ort. süre (ms) | Ort. CPU (ms) | Ort. okuma | Süredeki pay |
|---|---|---|---|---|---|
| 0x54254808B1946D3D | 297 | 1,1 | 1,1 | 21 | %84,6 |
| 0x62287FCFEC64B3A7 | 94 | 0,6 | 0,6 | 215 | %15,4 |
Bağımlılıklar
Doğrudan referanslar (sys.sql_expression_dependencies); dinamik SQL ve geç bağlanan adlar görünmeyebilir.aynı veritabanıbaşka veritabanılinked server
| Yön | Nesne | Tür | Kapsam |
|---|---|---|---|
| kullanıyor | DBA.fn_GetSettingNvarchar | fonksiyon | aynı veritabanı |
| kullanıyor | DBA.NotificationLog | tablo | aynı veritabanı |
| kullanıyor | msdb.dbo.sp_send_dbmail | – | başka veritabanı |
| kullanıyor | msdb.dbo.sysmail_principalprofile | – | başka veritabanı |
| kullanıyor | msdb.dbo.sysmail_profile | – | başka veritabanı |
| kullanan | DBA.usp_Notify_Collection | yordam | aynı veritabanı |
| kullanan | test_SendMail.test alici yoksa atlar | yordam | aynı veritabanı |
| kullanan | test_SendMail.test database mail kapaliysa atlar ve loglar | yordam | aynı veritabanı |
-- Tek gönderim yolu: Database Mail kapalıysa ya da profil yoksa göndermez (Skipped + neden). tSQLt bu yordamı taklit eder.
CREATE PROCEDURE DBA.usp_SendMail
@Kind varchar(20), @Subject nvarchar(255), @Body nvarchar(max), @Status varchar(10) OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @to nvarchar(1000) = NULLIF(LTRIM(RTRIM(DBA.fn_GetSettingNvarchar(N'Notify.MailRecipients', N''))), N''),
@profile sysname = NULLIF(LTRIM(RTRIM(DBA.fn_GetSettingNvarchar(N'Notify.MailProfile', N''))), N''),
@detail nvarchar(2000) = NULL;
SET @Status = 'Skipped';
IF @to IS NULL SET @detail = N'Alıcı yok (Notify.MailRecipients).';
ELSE IF ISNULL((SELECT CAST(value_in_use AS int) FROM sys.configurations WHERE name = N'Database Mail XPs'), 0) = 0
SET @detail = N'Database Mail kapalı (Database Mail XPs = 0).';
ELSE IF @profile IS NOT NULL AND NOT EXISTS (SELECT 1 FROM msdb.dbo.sysmail_profile WHERE name = @profile)
SET @detail = N'Database Mail profili yok: ' + @profile;
ELSE IF @profile IS NULL AND NOT EXISTS (SELECT 1 FROM msdb.dbo.sysmail_principalprofile WHERE is_default = 1)
SET @detail = N'Varsayılan Database Mail profili yok; Notify.MailProfile ayarlanmalı.';
ELSE
BEGIN
BEGIN TRY
EXEC msdb.dbo.sp_send_dbmail @profile_name = @profile, @recipients = @to, @subject = @Subject, @body = @Body;
SET @Status = 'Sent';
END TRY
BEGIN CATCH
SELECT @Status = 'Error', @detail = LEFT(ERROR_MESSAGE(), 2000);
END CATCH
END
INSERT DBA.NotificationLog (Kind, Recipients, Subject, Status, Detail) VALUES (@Kind, @to, @Subject, @Status, @detail);
END;
Bu nesnenin analizleri
Kayıt yok
Bu nesne için analiz yok.