PRB: Crear nuevos objetos de base de datos falla en una base de datos de SQL Server

Seleccione idioma Seleccione idioma
Id. de artículo: 827448 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Síntomas

Cuando intenta crear un objeto como una tabla, una vista, una restricción DEFAULT, una regla, un procedimiento almacenado o un desencadenador en una base de datos de Microsoft SQL Server, puede recibir un mensaje de error que indica que el objeto ya existe en la base de datos. Por ejemplo, si intenta crear una nueva tabla, puede recibir un mensaje de error que es similar al siguiente:

Servidor: Msg 2714, nivel 16, estado 6, línea 1
Ya hay un objeto denominado ' TableName ' en la base de datos.
Y si intenta colocar la tabla que ha intentado crear anteriormente, puede recibir un mensaje de error que es similar al siguiente:

Servidor: Msg 3701, nivel 11, estado 5, línea 1
No se puede eliminar la tabla ' TableName ', porque no existe en el catálogo del sistema.
Sin embargo, puede observar que el objeto que intenta crear no existe en la base de datos. Si consulta la tabla de sistema sysobjects , puede observar que la tabla que ha intentado crear anteriormente no existe.

Cuando intenta crear un procedimiento almacenado, puede recibir un mensaje de error que es similar al siguiente:

Msj 2601, nivel 14, estado 3
Intentar insertar una fila de clave duplicada en el objeto 'sysprocedures' con índice único 'sysprocedures'

Msj 2811, nivel 16, estado 2
No se puede crear el procedimiento dbid 1, objid 498100815, con un número de grupo de 1.
También puede observar un comportamiento similar al intentar actualizar una instancia de SQL Server 2000 o Service Pack 1 (SP1) de SQL Server 2000 a SQL Server 2000 Service Pack 2 (SP2) o Service Pack 3 (SP3). La instalación de SQL Server puede mostrar mensajes de error similares al siguiente cuando se actualiza a SQL Server 2000 SP2 o SP3:

Servidor: Mensaje 134, nivel 16, estado 2, procedimiento sp_droplogin, línea 4
Ya se ha declarado el nombre de variable '@ nombreinicio'. Los nombres de variables deben ser únicos dentro de un lote de consultas o procedimiento almacenado.

Servidor: Mensaje 2714, nivel 16, estado 5 procedimiento sp_droplogin, línea 4
Ya hay un objeto denominado 'sp_droplogin' en la base de datos.

Solución

Para evitar el problema, debe crear muchos objetos de base de datos para que el identificador de objeto se incrementa para cada nuevo objeto de base de datos creado. Debe continuar crear objetos de base de datos, incluso si no tiene éxito la instrucción CREATE que se ejecuta. Se crearán los nuevos objetos de base de datos cuando el valor de identificador de objeto generado pasa el intervalo de identificadores de objeto que ya están en uso.

Lo siguiente es un script de ejemplo que se puede ejecutar en la base de datos afectado para generar identificadores de objeto hasta que se genera un valor de identificador de objeto no utilizado y el objeto se crea correctamente.

Nota Replace DatabaseName with Your Database Name.
USE DatabaseName
GO

DECLARE	@i 	int,
	@str1 	varchar(255), 
	@str2 	varchar(10),
	@str3 	varchar(255),
	@str4 	varchar(255),
	@str5 	varchar(255)

SELECT @i = 0  

WHILE (@i < 1000) 
BEGIN    
  SELECT @str1 = 'CREATE TABLE test_table'
  SELECT @str2 = '(col1 int)'    
  SELECT @str3 = @str1 + CONVERT(varchar(6), @i) + @str2
  SELECT @str4 = 'DROP TABLE test_table'
  SELECT @str5 = @str4 + CONVERT(varchar(6), @i)
  EXEC (@str3)
  EXEC (@str5)    
  SELECT @i = @i + 1  
END

Más información

Las distintas variaciones del problema son:
  • El identificador de objeto ya está en uso y el objeto existente tiene filas de la tabla de sistema syscolumns . Cuando intenta crear un procedimiento almacenado, puede producirse un error con error número 134. Este problema se produce porque la tabla syscolumns ya contiene una fila con los mismos valores para el identificador , el colid y las columnas paramid .
  • El identificador de objeto ya está en uso y el objeto existente no tiene filas en syscolumns. Un intento de insertar una fila en la tabla de sistema sysobjects encuentra que el nuevo objid ya existe en la tabla. Se ha anulado el intento de insertar la fila y puede recibir un mensaje de error con número de error 2714.
  • El identificador de objeto ya está en uso pero el objeto que está asociado el objeto que identificador se ha eliminado.
    Intento de crear un objeto tiene éxito, pero los intentos subsiguientes aún pueden sufrir errores debido a otras variaciones del problema que se menciona en esta sección de.

Propiedades

Id. de artículo: 827448 - Última revisión: martes, 02 de diciembre de 2003 - Versión: 1.3
La información de este artículo se refiere a:
  • Microsoft SQL Server 2000 Standard Edition
Palabras clave: 
kbmt kberrmsg kbview kbstoredproc kbtsql kbtrigger kbtable kbsetup kbscript kbmessagebox kbserver kbdatabase kbprb KB827448 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 827448

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com