请问一个msdb发email的问题

coyun 2013-08-24 06:42:36
我在asp.net里面有一个insert语句,执行这个insert语句的时候有一个trigger要运行一个msdb下面的一个stored procedure,然后自动发email.但是每次都出错: Procedure sysmail_verify_profile_sp, Line 42 profile name is not valid。

我运行下面语句发现profile是存在的:
EXECUTE msdb.dbo.sysmail_help_principalprofile_sp
@principal_name = 'danw',
@profile_name = 'AdventureWorks Administrator' ;
...全文
138 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andy__Huang 2013-08-26
  • 打赏
  • 举报
回复
那你就改用存储过程,不要用trigger. 不知道为什么,部分新手也喜欢用trigger,我向来不喜欢用trigger,除非不得而以。 为什么呢?有时候产生了数据据,如果不知道有trigger,不知道为何生产数据? 或者trigger有问题,让以后维护系统的人查检带来麻烦
唐诗三百首 2013-08-26
  • 打赏
  • 举报
回复
请确认SSMS里执行sp_send_dbmail的帐号,跟执行insert trigger的帐号是否一致? 将所用的profile设为public profile试试..
coyun 2013-08-26
  • 打赏
  • 举报
回复
我现在的情况是,如果在sql server management studio里面,执行: EXEC MSDB.DBO.SP_SEND_DBMAIL @PROFILE_NAME = 'test_profile', @RECIPIENTS = 'xxx@xxx.com', -- 收件人地址 @SUBJECT = 'test from sql', -- 邮件主题 @BODY = 'test only ' -- 邮件内容 就可以。 但是,如果把这个语句放到一个table的insert时候的trigger里面,就抱错: Procedure sysmail_verify_profile_sp, Line 42 profile name is not valid。
Andy__Huang 2013-08-24
  • 打赏
  • 举报
回复
  
CREATE PROCEDURE dbo.sysmail_help_principalprofile_sp  
   @principal_id int = NULL, -- must provide id or name  
   @principal_name sysname = NULL,  
   @profile_id int = NULL, -- must provide id or name  
   @profile_name sysname = NULL  
AS  
   SET NOCOUNT ON  
  
   DECLARE @rc int  
   DECLARE @principal_sid varbinary(85)  
   DECLARE @profileid int  
  
   exec @rc = msdb.dbo.sysmail_verify_profile_sp @profile_id, @profile_name, 1, 0, @profileid OUTPUT  
   IF @rc <> 0  
      RETURN(1)  
  
   IF (@principal_id IS NOT NULL AND @principal_id = 0) OR (@principal_name IS NOT NULL AND @principal_name = N'public')  
   BEGIN  
      IF (@principal_id IS NOT NULL AND @principal_id <> 0) OR (@principal_name IS NOT NULL AND @principal_name <> N'public')  
      BEGIN  
         RAISERROR(14605, -1, -1, 'principal')  -- id and name do not match  
      END  
      SET @principal_sid = 0x00 -- public  
  
      IF (@profileid IS NOT NULL)  
      BEGIN  
         SELECT principal_id=0,   
                principal_name = N'public',   
                prof.profile_id,   
                profile_name=prof.name,   
                prin.is_default  
         FROM msdb.dbo.sysmail_principalprofile prin, msdb.dbo.sysmail_profile prof   
         WHERE prin.profile_id=prof.profile_id AND   
               prin.principal_sid = @principal_sid AND   
               prof.profile_id=@profileid  
      END  
      ELSE  
      BEGIN  
         SELECT principal_id=0,   
                principal_name = N'public',   
                prof.profile_id,   
                profile_name=prof.name,   
                prin.is_default  
         FROM msdb.dbo.sysmail_principalprofile prin, msdb.dbo.sysmail_profile prof   
         WHERE prin.profile_id=prof.profile_id AND   
               prin.principal_sid = @principal_sid  
      END  
   END  
   ELSE -- non-public profiles  
   BEGIN  
      IF (@principal_id IS NOT NULL OR @principal_name IS NOT NULL)        
      BEGIN  
            exec @rc = msdb.dbo.sysmail_verify_principal_sp @principal_id, @principal_name, 1, @principal_sid OUTPUT  
            IF @rc <> 0  
               RETURN(2)  
      END  
  
      IF ((@principal_id IS NOT NULL OR @principal_name IS NOT NULL) AND @profileid IS NOT NULL)  
      BEGIN  
            SELECT principal_id=dbprin.principal_id,  
                   principal_name=dbprin.name,  
                   prof.profile_id,  
                   profile_name=prof.name,  
                   prinprof.is_default  
            FROM sys.database_principals dbprin, msdb.dbo.sysmail_principalprofile prinprof, msdb.dbo.sysmail_profile prof  
            WHERE dbprin.principal_id = dbo.get_principal_id(prinprof.principal_sid) AND  
                  (prinprof.principal_sid = @principal_sid OR prinprof.principal_sid = 0x00) AND  
                  prof.profile_id = prinprof.profile_id AND  
                  prinprof.profile_id = @profileid  
      END  
      ELSE IF (@principal_id IS NOT NULL OR @principal_name IS NOT NULL)  
      BEGIN  
            SELECT principal_id=dbprin.principal_id,  
                   principal_name=dbprin.name,  
                   prof.profile_id,  
                   profile_name=prof.name,  
                   prinprof.is_default  
            FROM sys.database_principals dbprin, msdb.dbo.sysmail_principalprofile prinprof, msdb.dbo.sysmail_profile prof  
            WHERE dbprin.principal_id = dbo.get_principal_id(prinprof.principal_sid) AND  
                  (prinprof.principal_sid = @principal_sid OR prinprof.principal_sid = 0x00) AND  
                  prof.profile_id = prinprof.profile_id  
      END  
      ELSE IF (@profileid IS NOT NULL)  
      BEGIN  
            SELECT principal_id=dbprin.principal_id,  
                   principal_name=dbprin.name,  
                   prof.profile_id,  
                   profile_name=prof.name,  
                   prinprof.is_default  
            FROM sys.database_principals dbprin, msdb.dbo.sysmail_principalprofile prinprof, msdb.dbo.sysmail_profile prof  
            WHERE dbprin.principal_id = dbo.get_principal_id(prinprof.principal_sid) AND  
                  prof.profile_id = prinprof.profile_id AND  
                  prinprof.profile_id = @profileid  
      END  
      ELSE -- no parameters are supplied for filtering  
      BEGIN  
            SELECT principal_id=dbprin.principal_id,  
                   principal_name=dbprin.name,  
                   prof.profile_id,  
                   profile_name=prof.name,  
                   prinprof.is_default  
            FROM sys.database_principals dbprin, msdb.dbo.sysmail_principalprofile prinprof, msdb.dbo.sysmail_profile prof  
            WHERE dbprin.principal_id = dbo.get_principal_id(prinprof.principal_sid) AND  
                  prof.profile_id = prinprof.profile_id  
      END  
   END  
   RETURN(0)  
   
这个存储过程调用需要四个参数,你只用两个参数。你尝试改用四个参数看看

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧