Sql server 2008 SQL Server 2008至SQL Azure sp_helpuser和sp_send_dbmail
我收到以下消息:azure不支持以下sp_helpuser和sp_send_dbmail 修复此问题的建议方法是什么 以下是这些sp的使用位置: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
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