Cuando se utiliza la base de datos SQL, se indica que el nombre del objeto 'XXX' no es válido. ¿Cuál es el motivo?
Razón 1: La base de datos recién creada no importó los datos iniciales a la nueva base de datos.
Solución:
Inicie sesión en nuestro panel de control de base de datos-gt; haga una copia de seguridad y restaure el sistema, y luego use la función de restauración de la base de datos para cargar y restaurar directamente la copia de seguridad de su base de datos allí. Si no hay errores durante la operación, su base de datos generalmente se ha restaurado. Este método es adecuado para restaurar algunas bases de datos donde los datos iniciales no son muy grandes (dentro de 30 M). Si los datos iniciales de su base de datos son muy grandes, el éxito. La tasa de carga y restauración en línea es relativamente baja, entonces utilice el método de importación y exportación de bases de datos para restaurar. Para conocer los métodos de importación y exportación detallados, consulte otro documento de ayuda de nuestra empresa. >
Razón 2: la base de datos se ha migrado y el nuevo nombre del propietario del objeto de la base de datos es diferente.
Después de migrar la base de datos, generalmente se llevará a cabo el proceso de importación/restauración de datos. out.Durante este proceso, debe tenerse en cuenta que el nombre completo del objeto de la nueva base de datos es coherente con el original.
Por ejemplo, su base de datos anterior se llama db1 y el usuario de la base de datos anterior es dbuser1. Ahora desea migrar a una nueva base de datos. El nombre de la nueva base de datos es db2 y el nuevo usuario de la base de datos es dbuser2.
El nombre de objeto completo del objeto sqlserver es? Nombre de la base de datos. Nombre de la tabla. De esta manera, suponiendo que haya una tabla llamada tabla1 en su base de datos anterior, entonces su nombre de objeto completo es db1. dbuser1 .table1,
Cuando inicia sesión con un nuevo nombre de base de datos para importar datos antiguos, el nuevo nombre de la tabla puede convertirse en db2.dbuser2.table1. En este caso, pueden aparecer objetos cuando su programa consulta los datos. Error de nombre no válido.
Solución: para resolver este problema, generalmente se requieren dos pasos:
1. Utilice?sp_changeobjectowner 'aquí para el nombre completo del objeto de la base de datos', 'dbo' this The El comando cambia los propietarios de todas las tablas de usuarios, vistas de usuarios, procedimientos almacenados de usuarios, etc. al dbo de usuario especial integrado en el sistema.
El siguiente es un procedimiento almacenado que puede simplificar la ejecución de las operaciones anteriores. Se ejecuta el siguiente procedimiento almacenado. Es posible que todavía haya algunos objetos cuyos propietarios no se puedan cambiar. En este caso, ejecute manualmente el comando anterior e inténtelo nuevamente con los objetos cuyos propietarios no se puedan cambiar.
declarar cursor @CrsrVar
declarar @pname? varchar(40) --Nombre del objeto
declarar @oldowner varchar(40) --Propietario del objeto original
declare @objfullname varchar(80) --El nombre completo del objeto original
set @oldowner = 'Esto se cambia al antiguo nombre del propietario de la tabla/vista/almacenado de datos procedimiento, etc.'
set? @CrsrVar = Cursor para seleccionar el nombre de sysobjects donde xtype='U' --xtype=U representa la tabla de usuarios
open? p>
buscar siguiente de @CrsrVar en @pname
mientras(@@fetch_status=0)
comenzar
establecer @objfullname = @oldowner? '.' @pname
exec sp_changeobjectowner @objname=@objfullname, @newowner='dbo'? --dbo es el nombre del propietario
buscar a continuación desde @CrsrVar a @pname
end
cerrar? @CrsrVar
desasignar? @CrsrVar
2. el programa del sitio web y utilizó el método al consultar los datos. Sentencias SQL como ?select * from dbuser1.table1? En general, esto no es un buen hábito. En este caso, si la base de datos se ha migrado, a menudo causará un error. error de nombre de objeto no válido. Para evitar esto, este es un problema innecesario. Se recomienda que al consultar datos en el programa, utilice directamente ?select * from table1? en el programa, pero solo use el nombre de la tabla o el nombre de la vista, para que esto pueda evitar problemas innecesarios de "nombre de objeto no válido".