4

次の sp_helpuser および sp_send_dbmail は azure ではサポートされていないというメッセージを受け取ります。

これを修正するための推奨される方法は何ですか?

これらの sp が使用される場所は次のとおりです。

CREATE PROCEDURE [dbo].[aspnet_Setup_RemoveAllRoleMembers]
    @name   sysname
    AS
    BEGIN
    CREATE TABLE #aspnet_RoleMembers
(
    Group_name      sysname,
    Group_id        smallint,
    Users_in_group  sysname,
    User_id         smallint
)

INSERT INTO #aspnet_RoleMembers
EXEC sp_helpuser @name <--here it is

DECLARE @user_id smallint
DECLARE @cmd nvarchar(500)
DECLARE c1 cursor FORWARD_ONLY FOR
    SELECT User_id FROM #aspnet_RoleMembers

OPEN c1

FETCH c1 INTO @user_id
WHILE (@@fetch_status = 0)
BEGIN
    SET @cmd = 'EXEC sp_droprolemember ' + '''' + @name + ''', ''' + USER_NAME(@user_id) + ''''
    EXEC (@cmd)
    FETCH c1 INTO @user_id
END

CLOSE c1
DEALLOCATE c1
END
GO

そして他のsp:

CREATE PROCEDURE [dbo].[spSendMail]
@To VARCHAR(200),
@Subject VARCHAR(200),
@Body VARCHAR(MAX) = '',
@From VARCHAR(50) = 'info.pt@consultaclick.com',
@format VARCHAR(20) = 'HTML' --HTML
 AS

DECLARE
@profile VARCHAR(50)

select @profile = P.DBMailProfile from tblPaises P INNER JOIN tblParametros PR On P.Codigo = PR.Pais


EXEC MSDB..sp_send_dbmail @profile_name = @profile,
        @recipients =  'someone@somewhere.pt;someon@somehwere.pt',
        --@recipients =  @To,
        --@from_address = @From,
        @subject = @Subject,
        @Body = @Body,
        @body_format = @format
GO
4

2 に答える 2

4

はい、"sp_helpuser" は SQL Azure ではサポートされていないため、別のユーザーになりすます場合は、"EXECUTE AS USER" を使用できます。詳細はこちら

また、'msdb.dbo.sp_send_dbmail' は SQL Azure ではサポートされていませんが、解決策が記載されたブログがここにあります。他のソリューションもある可能性がありますが、使用するトップのソリューションを検討することができます.

于 2012-06-01T22:21:42.850 に答える
0

これと同じ問題にぶつかりました/これまでに返信して正しい方向に向けてくれたすべての人に感謝します. 関数をスクリプトに置き換えてsp_helpuser、特定のロールのすべてのメンバーをフェッチするという簡単な修正を行いました。注:sp_hepuser他のスコープから呼び出される可能性があるため、自分自身を再作成していません。aspnet_Setup_RemoveAllRoleMembersを呼び出す代わりに、基になるテーブルを直接クエリするように修正しましたsp_helpuser

ALTER PROCEDURE [dbo].[aspnet_Setup_RemoveAllRoleMembers]
    @name   sysname
    AS
BEGIN
    CREATE TABLE #aspnet_RoleMembers
    (
        Group_name      sysname,
        Group_id        smallint,
        Users_in_group  sysname,
        User_id         smallint
    )

    INSERT INTO #aspnet_RoleMembers (Group_name, Group_id, Users_in_group, User_id)
    --begin code to replace sp_helpuser
    select roles.name Role_name
    , roles.principal_id Role_id
    , members.name Users_in_role
    , members.principal_id Userid
    from sys.database_principals roles
    inner join sys.database_role_members link on link.role_principal_id = roles.principal_id
    inner join sys.database_principals members on members.principal_id = link.member_principal_id
    where roles.type = 'R'
    and roles.name = @name
    --end code to replace sp_helpuser

    DECLARE @user_id smallint
    DECLARE @cmd nvarchar(500)
    DECLARE c1 cursor FORWARD_ONLY FOR
        SELECT User_id FROM #aspnet_RoleMembers
    OPEN c1
        FETCH c1 INTO @user_id
        WHILE (@@fetch_status = 0)
        BEGIN
            SET @cmd = 'EXEC sp_droprolemember ' + '''' + @name + ''', ''' + USER_NAME(@user_id) + ''''
            EXEC (@cmd)
            FETCH c1 INTO @user_id
        END
    CLOSE c1
    DEALLOCATE c1
END
GO

このソリューションはまだテストしていません。自己責任で使用してください...しかし、それが役立つことを願っています...

于 2021-05-19T11:35:16.750 に答える