La forma correcta de hacer esto en SQL Servidor 2005 y posteriores es dejar de pensar en el prefijo como "propietario". El sp_changeobjectowner
procedure es obsoleta desde SQL Server 2005, y en su lugar se debe usar schema DDL, por ejemplo:
ALTER SCHEMA dbo TRANSFER [current_owner].tablename;
Para comprobar el "dueño" actual (esto puede devolver varias filas si usted tiene más de un tablename
en varios esquemas):
SELECT s.name
FROM sys.schemas AS s
INNER JOIN sys.tables AS t
ON s.[schema_id] = t.[schema_id]
WHERE t.name = N'tablename';
También asegúrese de deletrear el objeto correctamente. En una intercalación de mayúsculas y minúsculas, por ejemplo, TABLENAME
y tablename
no son el mismo objeto, y deletrearlo con InCorrEcT CaSE también podría generar este error.
No, esto no es "la afirmación correcta" y cómo es su primera línea diferente de lo que el PO trató? EXEC no es necesario si es la única declaración en el lote, y el mensaje de error ciertamente no sugiere que el problema EXEC sea el que falta. Por favor, lea esto para ver por qué no debería recomendar sp_changeobjectowner: http://msdn.microsoft.com/en-us/library/ms177519 (v = sql.105) .aspx –
No sé si ha leído todo lo que hay en MSDN, lo hice, y aquí está: "el objeto puede calificarse con el propietario del objeto existente, en la forma existing_owner.object si el shema y su propietario tienen el mismo nombre ". Y está funcionando - probado, SI usted nombró el shema correcto. –
¿Leyó la pieza en la nota amarilla grande en la parte superior de la pantalla? No hay absolutamente ninguna razón para utilizar este procedimiento almacenado obsoleto en SQL Server 2008. ZERO. –