Sql server 2008 SQL Server 2008至SQL Azure sp_helpuser和sp_send_dbmail

Sql server 2008 SQL Server 2008至SQL Azure sp_helpuser和sp_send_dbmail,sql-server-2008,migration,azure-sql-database,Sql Server 2008,Migration,Azure Sql Database,我收到以下消息:azure不支持以下sp_helpuser和sp_send_dbmail 修复此问题的建议方法是什么 以下是这些sp的使用位置: CREATE PROCEDURE [dbo].[aspnet_Setup_RemoveAllRoleMembers] @name sysname AS BEGIN CREATE TABLE #aspnet_RoleMembers ( Group_name sysname, Group_id

我收到以下消息:azure不支持以下sp_helpuser和sp_send_dbmail

修复此问题的建议方法是什么

以下是这些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
是,SQL Azure中不支持“sp_helpuser”,因此如果您想模拟其他用户,可以使用“以用户身份执行”。更多详情请参阅


另外,SQLAzure中不支持“msdb.dbo.sp_send_dbmail”,但是这里有一个供您使用的示例。可能还有其他的解决方案,但你可以考虑使用最上面的一个。

< P>我们只是碰到了这个问题/感谢迄今为止所有回答我们正确方向的人。 我找到了一个快速修复方法,用脚本替换了
sp\u helpuser
函数来获取给定角色的所有成员。注意:我没有重新创建sp_hepuser本身,因为它可以从其他范围调用;但是已经修改了
aspnet\u Setup\u removeallrolembers
以直接查询基础表,而不是调用
sp\u 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

我们还没有测试这个解决方案;因此,使用风险自负。。。希望它能有所帮助……

可能的重复不是重复,因为我请求sp_帮助用户你有机会尝试我的建议吗?一年后我遇到了完全相同的问题-你最终解决了这个问题吗?
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