Compartir a través de


Solucionar problemas relacionados con el proyecto de base de datos, la generación y la implementación

Al crear, modificar, generar o implementar proyectos de base de datos, podrían surgir los problemas siguientes:

  • Errores en objetos de base de datos

  • Utilizar las nuevas palabras reservadas de Microsoft SQL Server 2005

  • Diferencias de la compilación en la línea de comandos

  • Dependencias y scripts de actualización

  • Los identificadores entre comillas pueden causar problemas al recargar el proyecto

  • El estado interno de la base de datos no es coherente con su contenido

  • Deshacer cambios pendientes

  • No se encuentra un usuario o grupo de Windows NT

  • Nombres de objetos duplicados y archivos excluidos

  • Nombres calificados con los nombres de la base de datos y del servidor

  • Rendimiento del esquema de importación de base de datos

  • Navegación de los errores de compilación

  • Errores de sintaxis al utilizar referencias de bases de datos cruzadas

  • Cambiar el nombre de proyectos y ensamblados de SQLCLR

  • Sintaxis no compatible con FULLTEXT STOPLIST

  • No se importa la cláusula SORT_IN_TEMPDB

  • Se pierde el estado de los identificadores entre comillas cuando se importan funciones con valores de tabla que contienen varias instrucciones

  • Algunos errores de proyecto no se borran después de compilar el proyecto

  • Sintaxis incorrecta del script posterior a la implementación

Errores en objetos de base de datos

Cuando un objeto de base de datos contiene uno o más errores de sintaxis, los mensajes de error asociados aparecen en la ventana Lista de errores.

Nota

El mensaje de error que aparece en la ventana Lista de errores debería proporcionar información acerca de lo que puede hacer para resolver el error. Después de resolver el error y guardar el objeto de base de datos, su icono recupera el estado normal y el error se quita de la ventana Lista de errores.

Utilizar las nuevas palabras reservadas de Microsoft SQL Server 2005

Las nuevas palabras clave reservadas de SQL Server 2005 son: EXTERNAL, PIVOT, REVERT, TABLESAMPLE y UNPIVOT. Aparecerá un error en la Ventana de salida si utiliza estas palabras clave reservadas como nombres de objetos de esquema en un proyecto de base de datos destinado a Microsoft SQL Server 2005 o SQL Server 2008.

Nota

Para resolver esta restricción, puede incluir los nombres de los objetos de esquema entre comillas. Por ejemplo, puede utilizar "CREATE TABLE [External] (c1 INT)".

Diferencias de la compilación en la línea de comandos

Si realiza una generación en la línea de comandos cuando tiene el proyecto abierto en Visual Studio, puede que no reciba todos los errores de compilación que recibe al realizar la generación en la interfaz de usuario.

Nota

Para solucionar este problema, cierre el proyecto de base de datos en Visual Studio antes de realizar una compilación desde la línea de comandos.

Dependencias y scripts de actualización

Para generar los objetos en el orden correcto en un script de actualización, Comparación de esquemas examina las dependencias de objeto. Por ejemplo, si una vista depende de una tabla, la tabla se debe crear antes que la vista. Si el objeto que depende del segundo objeto no tiene un nombre calificado con el nombre de esquema, quizás no se pueda identificar la dependencia y el script de actualización o de creación incluiría las instrucciones en un orden incorrecto. Esta diferencia puede producir errores al actualizar una base de datos de destino para que coincida con una base de datos de origen o al implementar los cambios en una base de datos. Este problema también se aplica a los scripts de generación de base de datos.

Nota

Para evitarlo, asegúrese de calificar con el nombre de esquema los nombres de los objetos que participan en relaciones de dependencia. En Visual Studio Premium y Visual Studio Ultimate, puede utilizar la refactorización de base de datos para completar los nombres de objeto. Para obtener más información, vea Completar los nombres de los objetos de base de datos. En el ejemplo siguiente, podrá estar seguro de que la dependencia se identificará correctamente si cambia el final de la instrucción para que haga referencia a [dbo].[KeysTable] en lugar de KeysTable:

CREATE VIEW [NewUser].[ViewReferencingScalarFunction] AS SELECT Column2, dbo.SimpleMultiplyParamByTwo(PK_Column) AS [Function] FROM KeysTable

Los identificadores entre comillas pueden causar problemas al recargar el proyecto

Aparecerán errores cuando guarde objetos o cargue una base de datos que contiene identificadores entrecomillados si la casilla SET QUOTED_IDENTIFIER está desactivada en las propiedades de la base de datos. Esta situación podría darse si importa un esquema de base de datos desde una base de datos que utiliza identificadores entrecomillados.

Nota

Para evitar el problema, tiene dos opciones. Puede modificar las definiciones de objeto para que utilicen corchetes en lugar de comillas. Por ejemplo, puede cambiar "Mi Tabla" a [Mi Tabla]. Como alternativa, puede abrir el menú Proyecto, hacer clic en Propiedades deProyectoBaseDeDatos y en la ficha Propiedades de la base de datos, y activar la casilla SET QUOTED_IDENTIFIER.

El estado interno de la base de datos no es coherente con su contenido

Puede aparecer el siguiente error al trabajar con Visual Studio Premium: "El estado interno del proyecto de base de datos es incoherente con su contenido. Descargue el proyecto y vuelva a cargarlo para resolver el problema.". Este error indica que, de algún modo, el proyecto, que mantiene una lista de los archivos que cree que contiene, ya no está sincronizado con el estado de los archivos. La razón más común por la cual podría producirse este error es que se elimine del disco uno de los archivos del proyecto cuando el proyecto de base de datos no está abierto. El error también puede producirse si hay problemas al importar un esquema de base de datos.

Nota

Para evitar este problema, puede hacer clic en Sincronizar en Vista de esquema. Si eso no funciona, puede descargar y recargar el proyecto de base de datos. Para ello, haga clic en el mismo en el Explorador de soluciones. Abra el menú Proyecto y haga clic en Descargar el proyecto. Una vez descargado, abra el menú Proyecto y haga clic en Volver a cargar el proyecto.

Deshacer cambios pendientes

La Vista de esquema no se actualiza automáticamente tras usar el comando Deshacer cambios pendientes del sistema de control de versiones. Por ejemplo, si cambia el nombre de una tabla o una columna y, a continuación, deshace esos cambios, el mensaje "Cambio en un archivo externo, se debe volver a sincronizar" aparecerá en Vista de esquema.

Nota

Para solucionar este problema, debe hacer clic en Sincronizar en la barra de herramientas de la Vista de esquema.

No se encuentra un usuario o grupo de Windows NT

Si el proyecto de base de datos hace referencia a un nombre de inicio de sesión que no está disponible, se muestra el mensaje de error siguiente: "No se encuentra el usuario o grupo de Windows NT 'nombreDeDominio\nombreDeUsuario'. Compruebe el nombre". Este problema puede surgir al trabajar en un equipo que pertenece a un dominio distinto del de la base de datos cuyo esquema se importó. Esta situación suele producirse al trabajar en casa en un proyecto de base de datos creado en otro lugar. En estas circunstancias no podrá generar ni implementar el proyecto de base de datos.

Nota

Puede crear el usuario, omitiendo la cláusula FOR LOGIN. Por ejemplo, puede usar lo siguiente: CREATE USER [Domain\someLogin]. El usuario se creará al implementar el proyecto de base de datos y se asociará con el inicio de sesión [Domain\someLogin], pero no necesita una referencia a ese inicio de sesión en su proyecto de base de datos.

Nombres de objetos duplicados y archivos excluidos

Si tiene nombres de objeto duplicados en el proyecto de base de datos (por ejemplo, dos tablas denominadas Orders), aparecerá un error en la ventana Lista de errores. Aunque resuelva el problema excluyendo el archivo que contiene la definición de uno de los objetos, el mensaje de error no desaparecerá inmediatamente.

Nota

Para solucionarlo, puede hacer clic en Actualizar o modificar el archivo que contiene la definición del objeto, cambiar el nombre del objeto y guardar el archivo.

Nombres calificados con los nombres de la base de datos y del servidor

Al crear un objeto en Visual Studio Premium, el objeto se designa con la nomenclatura [esquema].[objeto].[secundario]. Si desea hacer referencia a un objeto de otra base de datos o de otro servidor, puede incluir el nombre de la base de datos y del servidor de la manera siguiente: [servidor].[base de datos].[esquema].[objeto].[elemento secundario]. Si crea un procedimiento almacenado o una vista que hace referencia a un objeto que requiere un nombre calificado con el nombre del servidor o con el nombre de la base de datos, aparecerá una advertencia.

Nota

Para resolver esta advertencia, debe definir una referencia de bases de datos cruzadas. Para obtener más información sobre las referencias de bases de datos cruzadas, vea Uso de referencias en proyectos de base de datos y Cómo: Agregar referencias a proyectos de base de datos.

Nota importanteImportante

La implementación no finalizará correctamente si el proyecto contiene advertencias sin resolver sobre nombres calificados con el nombre de la base de datos o del servidor y se activa la casilla Tratar advertencias como errores en la ficha Generar de las propiedades del proyecto de base de datos. Este error se debe a que los nombres calificados con el nombre de la base de datos o del servidor generan advertencias. Si utiliza nombres calificados con el nombre de la base de datos o del servidor, debe desactivar la casilla Tratar advertencias como errores.

Rendimiento del esquema de importación de base de datos

Si importa un esquema de base de datos mientras la ventana Editor de la lista de pruebas o Vista de pruebas está abierta, la operación de importación tardará mucho más tiempo en ejecutarse. Esta ejecución lenta se producirá en el Asistente para nuevo proyecto de base de datos (si decidió importar un esquema de base de datos) y durante la operación de importación del esquema de base de datos. El problema se produce aunque cierre las ventanas Editor de la lista de pruebas y Vista de pruebas antes de importar el esquema de base de datos.

Nota

Para solucionar este problema, debe cerrar las ventanas Editor de la lista de pruebas y Vista de pruebas, apagar y reiniciar Visual Studio y, a continuación, importar el esquema de base de datos. Para esquemas más pequeños, puede que no sea necesario realizar estos pasos; para la base de datos de ejemplo AdventureWorks, la operación de importación de esquema duró 27 segundos con la ventana Editor de lista de pruebas cerrada y 48 segundos con la ventana Editor de lista de pruebas abierta.

Si se produce un error en la implementación, no es posible corregir el error actualizando el script de compilación. Debe corregir el archivo de código fuente que se utiliza para generar ese script de compilación. Si hace doble clic en un error de implementación en la ventana Lista de errores, el script de compilación aparecerá en el editor y se mostrará la línea que produjo el error.

Nota

Para solucionar este problema, debe examinar el script de compilación para determinar la causa del error, pero después debe modificar el archivo de código fuente en el proyecto de base de datos que contiene el error. Por ejemplo, si el script posterior a la implementación Script.PostDeployment.sql contiene un error, debe modificar Script.PostDeployment.sql en lugar del script de compilación.

Errores de sintaxis al utilizar referencias de bases de datos cruzadas

Es posible que se produzcan uno o más errores de sintaxis al guardar una definición de objeto que contenga una referencia a un objeto de otra base de datos. Por ejemplo, puede agregar una referencia al proyecto de base de datos, definir variables denominadas RefServer y RefDatabase, y asignarles valores. A continuación, puede definir una vista tal como se indica:

CREATE VIEW [dbo].[MyView]
AS
SELECT * FROM $(RefServer).$(RefDatabase).dbo.TableName

Al guardar esta definición, puede recibir uno o más mensajes de error que indican que la sintaxis es incorrecta. Los mensajes de error pueden hacer referencia al nombre de la base de datos de validación en tiempo de diseño, lo que puede llevar a confusión.

Nota

Para resolver este problema, debe incluir los nombres de las variables entre paréntesis. Para corregir este ejemplo, cámbielo como se muestra a continuación:

CREATE VIEW [dbo].[MyView]
AS
SELECT * FROM [$(RefServer)].[$(RefDatabase)].dbo.TableName

Cambiar el nombre de proyectos y ensamblados de SQLCLR

No se puede implementar un proyecto de base de datos que contenga una referencia a un proyecto o ensamblado de SQLCLR si se le cambia el nombre pero no se actualiza la referencia.

Nota

Para corregir este problema, quite la referencia anterior y agregue una referencia al proyecto o ensamblado de SQLCLR con el nombre actualizado.

Sintaxis no compatible con FULLTEXT STOPLIST

Visual Studio Premium no modela la sintaxis FROM { [nombreDeBaseDeDatos.] nombreListaDePalabrasIrrelevantesDeOrigen } | SYSTEM STOPLIST ] de la instrucción CREATE FULLTEXT STOPLIST. Esa sintaxis se pasa por alto si se importa un objeto que la utiliza.

Nota

Para corregir este problema, debe agregar manualmente las palabras irrelevantes al script posterior a la implementación. Para obtener más información, vea Cómo: Especificar scripts anteriores o posteriores a la implementación.

No se importa la cláusula SORT_IN_TEMPDB

Visual Studio Premium no puede importar la cláusula SORT_IN_TEMPDB para los índices. Por ejemplo, podríamos tener el siguiente código:

CREATE TABLE [dbo].[IndexTable]
{
[Column1] [INT] NOT NULL
}
GO
CREATE NONCLUSTERED INDEX [SortInTempDbOn] ON [dbo].[IndexTable]
{
[Column1] ASC
} 
WITH (SORT_IN_TEMPDB = ON)
GO

El índice se importa sin la cláusula SORT_IN_TEMPDB.

Nota

Para corregir este problema, es preciso corregir la definición del índice manualmente cada vez que se importan los cambios de la base de datos al proyecto.

Se pierde el estado de los identificadores entre comillas cuando se importan funciones con valores de tabla que contienen varias instrucciones

Se pueden importar funciones con valores de tabla que contienen varias instrucciones, pero el estado de la cadena de identificador entre comillas no se guarda en SQL Server. Al importar estas funciones, pueden aparecer errores porque la configuración predeterminada para Identificadores entre comillas es que estén activados.

Nota

Para corregir este problema, es preciso cambiar la configuración de Identificadores entre comillas para todas las funciones con valores de tabla que contengan varias instrucciones después de importar objetos y configuraciones, y después de escribir las actualizaciones de la base de datos en el proyecto.

Algunos errores de proyecto no se borran después de recompilar el proyecto

Algunos errores que se producen en el proyecto de base de datos no desaparecen después de haber corregido la causa del error, aunque se recompile el proyecto. Por ejemplo, si se elimina el archivo .sqlpermissions al que el proyecto hace referencia mediante el Explorador de Windows, se produce un error, como cabría esperar. Si se utiliza el Explorador de soluciones para quitar el archivo del su proyecto y a continuación, recompilarlo, el error permanece, aunque lo haya corregido.

Nota

Para corregir este problema, debe hacer clic en Reanalizar el proyecto en la barra de herramientas del Explorador de soluciones.

Sintaxis incorrecta del script posterior a la implementación

De forma predeterminada, el modo SQLCMD está inhabilitado en el editor de Transact-SQL de Visual Studio 2010. Se ha efectuado esta modificación porque Intellisense no está activo cuando el modo SQLCMD está habilitado. Cuando lleva a cabo la implementación, podría ver el siguiente error si ha incluido instrucciones en el script posterior a la implementación.

Incorrect syntax near ':'. C:\MySandbox\MySolution\MyProject\Scripts\Post-Deployment\Script.PostDeployment.sql

Nota

Para corregirlo, debe permitir al modo SQLCMD. Para habilitar el modo SQLCMD, haga clic en Modo SQLCMD en la barra de herramientas Editor de Transact-SQL.

Vea también

Tareas

Cómo: Modificar objetos de base de datos

Cómo: Comparar y sincronizar los datos de dos bases de datos

Conceptos

Cambiar el nombre de todas las referencias a un objeto de base de datos

Cambiar el nombre de todas las referencias a un objeto de base de datos

Historial de cambios

Fecha

Historial

Motivo

Julio de 2010

Agregada una entrada para advertir a los usuarios de un cambio en el comportamiento predeterminado de Visual Studio 2010 que podría producir problemas en el script posterior a la implementación.

Comentarios de los clientes.