Quando tento instalar o tSQLt em um banco de dados existente, recebo o seguinte erro:
O SID do proprietário do banco de dados registrado no banco de dados mestre difere do SID do proprietário do banco de dados registrado no banco de dados ''. Você deve corrigir esta situação redefinindo o proprietário do banco de dados '' usando a instrução ALTER AUTHORIZATION.
sql-server
clrstoredprocedure
tsqlt
JDPeckham
fonte
fonte
Adicionado ao topo do script tSQLt.class.sql
declare @user varchar(50) SELECT @user = quotename(SL.Name) FROM master..sysdatabases SD inner join master..syslogins SL on SD.SID = SL.SID Where SD.Name = DB_NAME() exec('exec sp_changedbowner ' + @user)
fonte
tSQLt Version: 1.0.5873.27393
e parece ser uma solução mais simples. Usando o MS SQL Server 2019 Developer e SSMS 18.Aplique o script abaixo no banco de dados e obtenha o erro:
EXEC sp_changedbowner 'sa' ALTER DATABASE [database_name] SET TRUSTWORTHY ON
fonte
Necromaning:
se você não quiser usar as visualizações do SQL-Server 2000 (obsoletas), use:
-- Restore sid when db restored from backup... DECLARE @Command NVARCHAR(MAX) SET @Command = N'ALTER AUTHORIZATION ON DATABASE::<<DatabaseName>> TO <<LoginName>>' SELECT @Command = REPLACE ( REPLACE(@Command, N'<<DatabaseName>>', QUOTENAME(SD.Name)) , N'<<LoginName>>' , QUOTENAME ( COALESCE ( SL.name ,(SELECT TOP 1 name FROM sys.server_principals WHERE type_desc = 'SQL_LOGIN' AND is_disabled = 'false' ORDER BY principal_id ASC ) ) ) ) FROM sys.databases AS SD LEFT JOIN sys.server_principals AS SL ON SL.SID = SD.owner_sid WHERE SD.Name = DB_NAME() PRINT @command EXECUTE(@command) GO
Também evita bug em banco de dados ou usuário com nome estranho, e também corrige bug se nenhum usuário estiver associado (usa login sa).
fonte
A maneira mais simples de alterar o proprietário do banco de dados é:
fonte
Também encontrei esse problema e descobri que o proprietário do banco de dados de destino não existia no banco de dados mestre. O mapeamento desse usuário para o banco de dados mestre resolveu o problema para mim.
fonte