DBA.usp_SendMail
yordamDB-12 · değişiklik 9.10.2026 · Obje aramaya dön
İfadeler
0 ifade ·
0 çalışma ·
toplam 0,0 sn
Kayıt yok
Dönemde bu nesneye ait çalışma yok.
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ı |
-- 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.