Ketika saya mencoba menginstal tSQLt ke database yang sudah ada, saya mendapatkan error berikut:
SID pemilik database yang tercatat di database master berbeda dengan SID pemilik database yang tercatat di database ''. Anda harus memperbaiki situasi ini dengan mengatur ulang pemilik database '' menggunakan pernyataan ALTER AUTHORIZATION.
sql-server
clrstoredprocedure
tsqlt
JDPeckham
sumber
sumber
Menambahkan ini ke bagian atas skrip 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)
sumber
tSQLt Version: 1.0.5873.27393
dan tampaknya menjadi solusi yang lebih sederhana. Menggunakan Pengembang MS SQL Server 2019 dan SSMS 18.Terapkan skrip di bawah ini pada database Anda mendapatkan kesalahan:
EXEC sp_changedbowner 'sa' ALTER DATABASE [database_name] SET TRUSTWORTHY ON
sumber
Necromaning:
Jika Anda tidak ingin menggunakan tampilan SQL-Server 2000 (usang), gunakan ini:
-- 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
Juga mencegah bug pada database atau pengguna bernama aneh, dan juga memperbaiki bug jika tidak ada pengguna yang dikaitkan (menggunakan login).
sumber
Cara termudah untuk mengubah pemilik DB adalah:
sumber