Cuando intento instalar tSQLt en una base de datos existente, aparece el siguiente error:
El SID del propietario de la base de datos registrado en la base de datos maestra difiere del SID del propietario de la base de datos registrado en la base de datos ''. Debe corregir esta situación restableciendo el propietario de la base de datos '' mediante la instrucción ALTER AUTHORIZATION.
sql-server
clrstoredprocedure
tsqlt
JDPeckham
fuente
fuente
Se agregó esto a la parte superior del 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)
fuente
tSQLt Version: 1.0.5873.27393
y parece ser una solución más simple. Usando MS SQL Server 2019 Developer y SSMS 18.Aplique el siguiente script en la base de datos y obtendrá el error:
EXEC sp_changedbowner 'sa' ALTER DATABASE [database_name] SET TRUSTWORTHY ON
fuente
Necromaning:
si no desea utilizar las vistas de SQL-Server 2000 (obsoletas), utilice esto:
-- 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
También previene errores en bases de datos o usuarios con nombres extraños, y también corrige errores si no hay ningún usuario asociado (usa sa login)
fuente
La forma más sencilla de cambiar el propietario de la base de datos es:
fuente
También encontré este problema y descubrí que el propietario de la base de datos de destino no existía en la base de datos maestra. La asignación de ese usuario a la base de datos maestra resolvió el problema para mí.
fuente