2011-08-18 13 views
8

Este es mi primer intento de escribir un procedimiento almacenado que envía un correo electrónico a alguien. Al intentar ejecutar consigo estos errores:Procedimiento almacenado del servidor SQL para enviar correo electrónico

Msg 102, Level 15, State 1, Procedure EmailTodaysErrors, Line 14 
Incorrect syntax near '@MailServer'. 
Msg 137, Level 15, State 2, Procedure EmailTodaysErrors, Line 26 
Must declare the scalar variable "@mailserver". 
Msg 137, Level 15, State 2, Procedure EmailTodaysErrors, Line 33 
Must declare the scalar variable "@Body". 

El código que estoy usando que está causando esto es:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE EmailTodaysErrors 
@SenderName varchar(100), 
@SenderAddress varchar(100), 
@RecipientName varchar(100), 
@RecipientAddress varchar(100), 
@Subject varchar(200), 
@Body varchar(8000) 
@MailServer varchar(100) = 'localhost' 
AS 
SET NOCOUNT ON; 
declare @oMail int --Object reference 
declare @resultcode int 
EXEC @resultcode = sp_OACreate 'CDONTS.NewMail', @oMail OUT 

if @resultcode = 0 
BEGIN 
EXEC @resultcode = sp_OASetProperty @oMail, 'RemoteHost', @mailserver 
EXEC @resultcode = sp_OASetProperty @oMail, 'FromName', @SenderName 
EXEC @resultcode = sp_OASetProperty @oMail, 'FromAddress', @SenderAddress 
EXEC @resultcode = sp_OASetProperty @oMail, 'From', @SenderAddress 
EXEC @resultcode = sp_OASetProperty @oMail, 'To', @RecipientAddress 
EXEC @resultcode = sp_OASetProperty @oMail, 'Subject', @Subject 
EXEC @resultcode = sp_OASetProperty @oMail, 'Body', @Body 
EXEC @resultcode = sp_OAMethod @oMail, 'Send', NULL 
EXEC sp_OADestroy @oMail 
END 

set nocount off 
GO 

Cualquier ayuda sería muy apreciada. Gracias por adelantado.

Respuesta

11

Falta una coma después de la línea @body, que arroja sus declaraciones.

añadir aquí:

@Body varchar(8000), -- HERE 
@MailServer varchar(100) = 'localhost' 
+0

gracias esto trabaja –

+0

feliz de ayudar. Siempre revisa tus comas y paréntesis! – JNK

11

No use sp_oa_family para enviar correo, ya existe una solución integrada con SQL Server: Database Mail. Simplemente configure correctamente el Correo de la base de datos en su servidor, luego llame al sp_send_dbmail.

+0

Probé este método también, pero se queda bloqueado cuando se dice el nombre del perfil no es válido –

+0

Mientras dicho, * configure * Database Mail primero: http://technet.microsoft.com/en-us/library/ms175951.aspx –

2

Hay una coma que falta en su parámetros:

@Body varchar(8000), ---- HERE 
@MailServer varchar(100) = 'localhost' 
Cuestiones relacionadas