Drop the existing clustered index '_dta_index_yaf_UserProfile_c_7_492426714__K1' before creating another.
DROP INDEX _dta_index_yaf_UserProfile_c_7_492426714__K1
It can't be done from installation scripts automatically because in each case index name can vary.
(and there is a special drop index maintanance sp somewhere in tables.sql, I'm not sure that it works in all cases)
Your case is very rare because you have caught a version in development bug.
As to initdisplayname this is a code you can try to replace it in tables.sql. It should work even for a forum like yours.
I don't have time to wipe out possible bugs, because I don't use MS SQL Server, but still I can help anyone who will try it to wipe them.
create procedure [{databaseOwner}].[{objectQualifier}forum_initdisplayname] as
begin
declare @tmpUserName nvarchar(255)
declare @tmpUserDisplayName nvarchar(255)
declare @tmpLastUserName nvarchar(255)
declare @tmpLastUserDisplayName nvarchar(255)
declare @tmp int
declare @tmpUserID int
declare @tmpLastUserID int
update d
set d.UserDisplayName = ISNULL((select top 1 f.UserDisplayName FROM [{databaseOwner}].[{objectQualifier}Forum] f
join [{databaseOwner}].[{objectQualifier}User] u on u.UserID = f.UserID where u.UserID = d.UserID),
(select top 1 f.UserName FROM [{databaseOwner}].[{objectQualifier}Forum] f
join [{databaseOwner}].[{objectQualifier}User] u on u.UserID = f.UserID where u.UserID = d.UserID ))
from [{databaseOwner}].[{objectQualifier}Forum] d where d.UserDisplayName IS NULL OR d.UserDisplayName = d.UserName;
/* declare fc cursor for
select ForumID, LastUserID from [{databaseOwner}].[{objectQualifier}Forum]
where (LastUserDisplayName IS NULL OR LastUserName IS NULL) and LastUserID IS NOT NULL
FOR UPDATE
open fc
fetch next from fc into @tmp,@tmpLastUserID
while @@FETCH_STATUS = 0
begin
select @tmpLastUserDisplayName = u.DisplayName, @tmpLastUserName = u.Name FROM [{databaseOwner}].[{objectQualifier}User] u WHERE u.UserID = @tmpLastUserID
update [{databaseOwner}].[{objectQualifier}Forum] set LastUserDisplayName = @tmpLastUserDisplayName, LastUserName = @tmpLastUserName where [{databaseOwner}].[{objectQualifier}Forum].ForumID = @tmp
fetch next from fc into @tmp,@tmpLastUserID
end
close fc
deallocate fc */
update d
set d.UserDisplayName = ISNULL((select top 1 f.UserDisplayName FROM [{databaseOwner}].[{objectQualifier}ShoutboxMessage] f
join [{databaseOwner}].[{objectQualifier}User] u on u.UserID = f.UserID where u.UserID = d.UserID),
(select top 1 f.UserName FROM [{databaseOwner}].[{objectQualifier}ShoutboxMessage] f
join [{databaseOwner}].[{objectQualifier}User] u on u.UserID = f.UserID where u.UserID = d.UserID ))
from [{databaseOwner}].[{objectQualifier}ShoutboxMessage] d where d.UserDisplayName IS NULL OR d.UserDisplayName = d.UserName;
/* declare sbc cursor for
select ShoutBoxMessageID,UserID from [{databaseOwner}].[{objectQualifier}ShoutboxMessage]
where UserDisplayName IS NULL
FOR UPDATE
open sbc
fetch next from sbc into @tmp,@tmpUserID
while @@FETCH_STATUS = 0
begin
select @tmpUserDisplayName = u.DisplayName, @tmpUserName = u.Name FROM [{databaseOwner}].[{objectQualifier}User] u WHERE u.UserID = @tmpUserID
update [{databaseOwner}].[{objectQualifier}ShoutboxMessage] set UserDisplayName = @tmpUserDisplayName,UserName = @tmpUserName where [{databaseOwner}].[{objectQualifier}ShoutboxMessage].ShoutBoxMessageID = @tmp
fetch next from sbc into @tmp,@tmpUserID
end
close sbc
deallocate sbc
*/
update d
set d.UserDisplayName = ISNULL((select top 1 f.UserDisplayName FROM [{databaseOwner}].[{objectQualifier}Message] m
join [{databaseOwner}].[{objectQualifier}User] u on u.UserID = m.UserID where u.UserID = d.UserID),
(select top 1 f.UserName FROM [{databaseOwner}].[{objectQualifier}Message] m
join [{databaseOwner}].[{objectQualifier}User] u on u.UserID = m.UserID where u.UserID = d.UserID ))
from [{databaseOwner}].[{objectQualifier}Message] d where d.UserDisplayName IS NULL OR d.UserDisplayName = d.UserName;
/* declare mc cursor for
select MessageID,UserID from [{databaseOwner}].[{objectQualifier}Message]
where UserDisplayName IS NULL
FOR UPDATE
open mc
fetch next from mc into @tmp,@tmpUserID
while @@FETCH_STATUS = 0
begin
select @tmpUserDisplayName = u.DisplayName, @tmpUserName = u.Name FROM [{databaseOwner}].[{objectQualifier}User] u WHERE u.UserID = @tmpUserID
update [{databaseOwner}].[{objectQualifier}Message] set UserDisplayName = @tmpUserDisplayName, UserName = @tmpUserName where MessageID = @tmp
fetch next from mc into @tmp,@tmpUserID
end
close mc
deallocate mc
*/
update d
set d.UserDisplayName = ISNULL((select top 1 f.UserDisplayName FROM [{databaseOwner}].[{objectQualifier}Topic] t
join [{databaseOwner}].[{objectQualifier}User] u on u.UserID = t.UserID where u.UserID = d.UserID),
(select top 1 f.UserName FROM [{databaseOwner}].[{objectQualifier}Topic] t
join [{databaseOwner}].[{objectQualifier}User] u on u.UserID = t.UserID where u.UserID = d.UserID ))
from [{databaseOwner}].[{objectQualifier}Message] d where d.UserDisplayName IS NULL OR d.UserDisplayName = d.UserName;
/* declare tc cursor for
select TopicID,UserID,LastUserID from [{databaseOwner}].[{objectQualifier}Topic]
where (UserDisplayName IS NULL OR LastUserDisplayName IS NULL) and LastUserID IS NOT NULL
FOR UPDATE
open tc
fetch next from tc into @tmp,@tmpUserID,@tmpLastUserID
while @@FETCH_STATUS = 0
begin
select @tmpUserDisplayName = u.DisplayName, @tmpUserName = u.Name FROM [{databaseOwner}].[{objectQualifier}User] u WHERE u.UserID = @tmpUserID
select @tmpLastUserDisplayName = u.DisplayName, @tmpLastUserName = u.Name FROM [{databaseOwner}].[{objectQualifier}User] u WHERE u.UserID = @tmpLastUserID
update [{databaseOwner}].[{objectQualifier}Topic] set UserDisplayName = @tmpUserDisplayName, UserName = @tmpUserName where TopicID = @tmp
update [{databaseOwner}].[{objectQualifier}Topic] set LastUserDisplayName = @tmpLastUserDisplayName, LastUserName = @tmpLastUserName where TopicID = @tmp
fetch next from tc into @tmp,@tmpUserID,@tmpLastUserID
end
close tc
deallocate tc */
end
GO
Edited by moderator
9 years ago
|
Reason: added syntax highlighting