我的用户名已从(例如)jdoe更改为john.doe。 [dbo].[Users]
表中的引用显示了我的旧用户名。
但是,使用我的新用户名john.doe,订阅将无法运行并引发错误:
发送邮件失败:用户或组名“ ABCDE \ jdoe”不是 已确认。邮件将不会被重新发送。
[dbo].[Subscriptions].[OwnerID]
值引用jdoe的[dbo].[Users].[UserID]
。
我可以简单地将[dbo].[Users].[UserName]
值更改为我的新用户名,而将[dbo].[Users].[UserID]
和[dbo].[Users].[Sid]
列保留原样吗?
在此先感谢您提供的帮助!
答案 0 :(得分:0)
为此,我将使用MERGE
语句。首先回滚检查事务以进行测试。您还需要对UPDATE
表具有dbo.Users
权限。
SET XACT_ABORT ON
BEGIN TRANSACTION;
;WITH
users_list
AS
(
SELECT users_list.* FROM (VALUES
('DOMAIN\OldUser1', 'DOMAIN\New.User1')
, ('DOMAIN\OldUser2', 'DOMAIN\New.User2')
) users_list ([UserName], [NewUserName])
)
,
users_source -- don't add users that already exist to prevent duplicates
AS
(
SELECT
[UserName]
, [NewUserName]
FROM
users_list
WHERE
1=1
AND [NewUserName] NOT IN(SELECT [UserName] FROM [ReportServer].[dbo].[Users])
)
MERGE [ReportServer].[dbo].[Users] AS T
USING users_source AS S
ON T.[UserName] = S.[UserName]
WHEN MATCHED
THEN UPDATE SET
T.[UserName] = S.[NewUserName]
OUTPUT @@SERVERNAME AS [Server Name], DB_NAME() AS [Database Name], $action, inserted.*, deleted.*;
ROLLBACK TRANSACTION;
--COMMIT TRANSACTION;
GO
答案 1 :(得分:0)
我设法通过以下步骤解决了这个问题:
UPDATE [ReportServer].[dbo].[Users] SET UserName='domain\newUser' WHERE UserName='domain\OldUser'
答案 2 :(得分:0)
我尝试将dbo.Users.UserName重命名为新的DOMAIN / JDoe,但是仍然出现错误。
将SQL Server的安全用户名从DOMAIN / OldName重命名为DOMAIN / NewName可以解决问题。