Share via


Dépannage des problèmes de projet, de génération et de déploiement de base de données

Vous pouvez rencontrer les problèmes suivants lorsque vous créez, modifiez, générez ou déployez des projets de base de données :

  • Erreurs dans les objets de base de données

  • Utilisation de nouveaux mots réservés dans Microsoft SQL Server 2005

  • Différences dans la génération à partir de la ligne de commande

  • Dépendances et scripts de mise à jour

  • Les identificateurs entre guillemets peuvent causer des problèmes lors du rechargement du projet

  • L'état interne de la base de données est incohérent avec son contenu

  • Annulation de modifications en attente

  • Utilisateur ou groupe Windows NT introuvable

  • Noms d'objets en double et fichiers exclus

  • Noms qualifiés par une base de données et un serveur

  • Performances liées à l'importation du schéma de base de données

  • Navigation dans les erreurs de build

  • Erreurs de syntaxe lors de l'utilisation de références entre bases de données

  • Attribution d'un nouveau nom à des projets et des assemblys SQLCLR

  • Syntaxe non prise en charge pour l'instruction FULLTEXT STOPLIST

  • La clause SORT_IN_TEMPDB n'est pas importée

  • L'état des identificateurs entre guillemets est perdu lorsque vous importez des fonctions table contenant plusieurs instructions

  • Certaines erreurs de projet ne sont pas supprimées après la génération du projet

  • Syntaxe incorrecte dans le script de post-déploiement

Erreurs dans les objets de base de données

Lorsqu'un objet de base de données contient une ou plusieurs erreurs de syntaxe, les messages d'erreur associés s'affichent dans la fenêtre Liste d'erreurs.

Notes

Le message d'erreur qui apparaît dans la fenêtre Liste d'erreurs doit fournir des informations sur les actions possibles pour corriger l'erreur. Après avoir corrigé l'erreur et enregistré l'objet de base de données, l'état par défaut de l'icône de cet objet de base de données est rétabli et l'erreur est supprimée de la fenêtre Liste d'erreurs.

Utilisation de nouveaux mots réservés dans Microsoft SQL Server 2005

Les éléments suivants sont de nouveaux mots clés réservés dans SQL Server 2005 : EXTERNAL, PIVOT, REVERT, TABLESAMPLE et UNPIVOT. Une erreur est signalée dans la fenêtre Sortie si vous utilisez ces mots clés réservés comme noms d'objets de schéma dans un projet de base de données qui est ciblé pour Microsoft SQL Server 2005 ou SQL Server 2008.

Notes

Pour contourner cette restriction, vous pouvez mettre les noms d'objets de schéma entre guillemets. Par exemple, vous pouvez utiliser "CREATE TABLE [External] (c1 INT)".

Différences dans la génération à partir de la ligne de commande

Si vous exécutez une génération à partir de la ligne de commande lorsque le projet est ouvert dans Visual Studio, vous pouvez ne pas recevoir toutes les erreurs de build que vous recevez lorsque vous procédez à la génération dans l'interface utilisateur.

Notes

Pour contourner ce problème, fermez le projet de base de données dans Visual Studio avant de lancer une génération à partir de la ligne de commande.

Dépendances et scripts de mise à jour

Pour générer l'ordre correct des objets dans un script de mise à jour, la comparaison de schémas examine les dépendances d'objet. Par exemple, si une vue dépend d'une table, la table doit être créée avant la vue. Si l'objet qui dépend du deuxième objet n'utilise pas de nom qualifié par un schéma, la dépendance peut ne pas être identifiée et l'ordre des instructions peut être incorrect dans le script de mise à jour ou de création. Cette différence peut provoquer des erreurs lorsque vous mettez à jour une cible pour qu'elle corresponde à une source ou déployez des modifications dans une base de données. Ce problème s'applique également aux scripts de compilation de base de données.

Notes

Pour contourner ce problème, assurez-vous de qualifier par un schéma les noms des objets qui sont impliqués dans des relations dépendantes. Dans Visual Studio Premium et Visual Studio Ultimate, vous pouvez utiliser la refactorisation de base de données pour attribuer des noms complets aux objets. Pour plus d'informations, consultez Qualifier complètement le nom d'objets de base de données. Dans l'exemple suivant, vous pouvez garantir que la dépendance sera correctement identifiée si vous modifiez la fin de l'instruction pour qu'elle fasse référence à [dbo].[KeysTable] et non à KeysTable uniquement :

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

Les identificateurs entre guillemets peuvent causer des problèmes lors du rechargement du projet

Des erreurs s'affichent lorsque vous enregistrez des objets ou chargez une base de données qui contient des identificateurs entre guillemets si la case à cocher SET QUOTED_IDENTIFIER est désactivée dans les propriétés de base de données. Cette situation peut se produire si vous importez un schéma de base de données à partir d'une base de données qui a utilisé des identificateurs entre guillemets.

Notes

Pour contourner ce problème, vous avez deux possibilités. Vous pouvez modifier les définitions d'objets afin d'utiliser des crochets et non des guillemets. Par exemple, vous pouvez remplacer "My Table" par [My Table]. Vous pouvez également ouvrir le menu Projet, cliquer sur Propriétés de ProjetBaseDeDonnées, sur l'onglet Propriétés de la base de données, puis activer la case à cocher SET QUOTED_IDENTIFIER.

L'état interne de la base de données est incohérent avec son contenu

Vous pouvez recevoir le message d'erreur suivant lorsque vous utilisez Visual Studio Premium : "L'état interne du projet de base de données est incohérent avec son contenu. Déchargez le projet, puis rechargez-le pour résoudre le problème. ». Cette erreur indique que, pour une raison quelconque, le projet qui gère une liste des fichiers qu'il est supposé contenir n'est plus synchronisé avec l'état des fichiers. La cause la plus courante de cette erreur est la suppression de l'un des fichiers de votre projet du disque alors que le projet de base de données n'est pas ouvert. Cette erreur peut également résulter de problèmes qui surviennent lorsque vous importez un schéma de base de données.

Notes

Pour résoudre ce problème, vous pouvez cliquer sur Synchroniser dans la vue Schéma. Si cela ne fonctionne pas, vous pouvez décharger et recharger le projet de base de données. Pour ce faire, cliquez dessus dans l'Explorateur de solutions. Ouvrez le menu Projet et cliquez sur Décharger le projet. Une fois le projet déchargé, ouvrez le menu Projet et cliquez sur Recharger le projet.

Annulation de modifications en attente

La vue Schéma ne s'actualise pas automatiquement après l'utilisation de la commande Annuler les modifications en attente de votre système de contrôle de version. Si, par exemple, vous renommez une table ou une colonne, puis que vous rétablissez les modifications apportées, le message « Modification du fichier externe, resynchronisation requise... » s'affiche dans Vue Schéma.

Notes

Pour contourner ce problème, vous devez cliquer sur Synchroniser dans la barre d'outils Vue Schéma.

Utilisateur ou groupe Windows NT introuvable

Si votre projet de base de données référence un nom de connexion qui n'est pas disponible, le message d'erreur suivant s'affiche : « Utilisateur ou groupe Windows NT 'NomDomaine\NomConnexion' introuvable. Vérifiez une nouvelle fois le nom. » Ce problème peut se produire si vous travaillez sur un ordinateur qui se trouve dans un autre domaine que la base de données dont le schéma a été importé. Cette situation se présente généralement si vous travaillez à la maison sur un projet de base de données qui a été créé ailleurs. Dans ce cas, vous ne pouvez pas générer ou déployer le projet de base de données.

Notes

Vous pouvez créer l'utilisateur, en omettant la clause FOR LOGIN. Par exemple, vous pouvez utiliser ceci : CREATE USER [Domain\someLogin]. L'utilisateur est créé lorsque vous déployez le projet de base de données et associé à la connexion [Domaine\UneConnexion], mais vous n'avez pas besoin de référence à cette connexion dans votre projet de base de données.

Noms d'objets en double et fichiers exclus

Si votre projet de base de données contient des noms d'objets en double (par exemple deux tables appelées Orders), une erreur apparaît dans la fenêtre Liste d'erreurs. Même si vous résolvez le problème en excluant le fichier qui contient la définition de l'un des objets, le message d'erreur ne disparaît pas immédiatement.

Notes

Pour contourner ce problème, vous pouvez cliquer sur Actualiser, ou modifier le fichier qui contient la définition de l'objet, renommer ce dernier et enregistrer le fichier.

Noms qualifiés par une base de données et un serveur

Lorsque vous créez un objet dans Visual Studio Premium, cet objet est nommé selon la convention d'affectation des noms [schéma].[objet].[enfant]. Si vous souhaitez faire référence à un objet dans une autre base de données ou sur un autre serveur, vous pouvez inclure le nom de la base de données et le serveur de la façon suivante : [serveur].[base de données].[schéma].[objet].[enfant]. Si vous créez une procédure stockée ou une vue référençant un objet qui requiert un nom qualifié par une base de données ou un serveur, un avertissement s'affiche.

Notes

Pour supprimer cet avertissement, vous devez définir une référence entre bases de données. Pour plus d'informations sur les références entre bases de données, consultez Utilisation de références dans les projets de base de données et Comment : ajouter des références à des projets de base de données.

Important

Le déploiement échouera si votre projet contient des avertissements non résolus relatifs à des noms qualifiés par une base de données ou un serveur et que vous activez la case à cocher Considérer les avertissements comme des erreurs sous l'onglet Générer des propriétés du projet de base de données. Cet échec est dû au fait que les noms qualifiés par une base de données ou un serveur génèrent des avertissements. Vous devez désactiver la case à cocher Considérer les avertissements comme des erreurs si vous utilisez des noms qualifiés par une base de données ou un serveur.

Performances liées à l'importation du schéma de base de données

Si vous importez un schéma de base de données pendant que la fenêtre Explorateur de tests ou Affichage des tests est ouverte, l'exécution de l'opération d'importation prendra considérablement plus de temps. Ce ralentissement se produira à la fois dans l'Assistant Nouveau projet de base de données (si vous avez choisi d'importer un schéma de base de données) et pendant l'opération d'importation du schéma de base de données. Le problème se produit même si vous fermez la fenêtre Explorateur de tests et Affichage des tests avant d'importer le schéma de base de données.

Notes

Pour contourner ce problème, vous devez fermer la fenêtre Explorateur de tests et Affichage des tests, arrêter et redémarrer Visual Studio, puis importer le schéma de base de données. Pour des schémas de plus petite taille, vous n'aurez peut-être pas besoin de suivre ces étapes ; pour l'exemple de base de données AdventureWorks, l'opération d'importation de schéma a pris 27 secondes sans que la fenêtre Explorateur de tests soit ouverte et 48 secondes lorsqu'elle l'était.

Si le déploiement échoue, vous ne pouvez pas corriger l'erreur en mettant à jour le script de compilation généré. Vous devez corriger le fichier source qui est utilisé pour générer ce script de compilation. Si vous double-cliquez sur une erreur de déploiement dans la fenêtre Liste d'erreurs, le script de compilation apparaît dans l'éditeur, en affichant la ligne qui a provoqué l'erreur.

Notes

Pour contourner ce problème, vous devez examiner le script de compilation pour déterminer la cause de la défaillance, mais vous devez ensuite modifier le fichier source dans le projet de base de données qui contient l'erreur. Par exemple, si le script de post-déploiement Script.PostDeployment.sql contient une erreur, vous devez modifier Script.PostDeployment.sql au lieu du script de compilation.

Erreurs de syntaxe lors de l'utilisation de références entre bases de données

Une ou plusieurs erreurs de syntaxe peuvent s'afficher lorsque vous enregistrez une définition d'objet qui contient une référence à un objet d'une autre base de données. Par exemple, vous pouvez ajouter une référence au projet de base de données, définir des variables nommées RefServer et RefDatabase, puis leur assigner des valeurs. Vous pouvez ensuite définir une vue comme suit :

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

Lorsque vous enregistrez cette définition, un ou plusieurs messages d'erreur qui indiquent une syntaxe incorrecte peuvent s'afficher. Les messages d'erreur peuvent référencer le nom de votre base de données de validation au moment du design, ce qui peut prêter à confusion.

Notes

Pour résoudre ce problème, vous devez placer les noms de variables entre crochets. Pour corriger cet exemple, modifiez-le comme suit :

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

Attribution d'un nouveau nom à des projets et des assemblys SQLCLR

Vous ne serez pas en mesure de déployer un projet de base de données contenant une référence à un projet ou assembly SQLCLR si vous le renommez, mais ne mettez pas à jour la référence.

Notes

Pour résoudre ce problème, supprimez l'ancienne référence et ajoutez une référence au projet ou assembly SQLCLR avec le nom mis à jour.

Syntaxe non prise en charge pour l'instruction FULLTEXT STOPLIST

Visual Studio Premium ne modélise pas la syntaxe FROM { [NomBaseDeDonnées .]NomListeDeMotsVidesSource } | SYSTEM STOPLIST ] facultative pour l'instruction CREATE FULLTEXT STOPLIST Cette syntaxe est ignorée si vous importez un objet qui l'utilise.

Notes

Pour résoudre ce problème, vous devez ajouter manuellement des mots vides à votre script de post-déploiement. Pour plus d'informations, consultez Comment : spécifier des scripts de prédéploiement ou de post-déploiement.

La clause SORT_IN_TEMPDB n'est pas importée

Visual Studio Premium ne peut pas importer la clause SORT_IN_TEMPDB pour les index. Prenons l'exemple du code suivant :

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

L'index est importé sans la clause SORT_IN_TEMPDB.

Notes

Pour résoudre ce problème, vous devez corriger la définition d'index manuellement, et ce, chaque fois que vous importez des modifications depuis la base de données vers votre projet.

L'état des identificateurs entre guillemets est perdu lorsque vous importez des fonctions table contenant plusieurs instructions

Vous pouvez importer des fonctions table contenant plusieurs instructions, mais l'état de la chaîne d'identificateur entre guillemets n'est pas enregistré dans SQL Server. Lorsque vous importez ces fonctions, des erreurs peuvent être générées car le paramètre par défaut pour les identificateurs entre guillemets est activé.

Notes

Pour résoudre ce problème, vous devez modifier le paramètre des identificateurs entre guillemets pour des fonctions table contenant plusieurs instructions, après avoir importé des objets et des paramètres ou après avoir écrit des mises à jour entre votre base de données et votre projet.

Certaines erreurs de projet ne sont pas supprimées après la régénération du projet

Certaines des erreurs que vous pouvez rencontrer dans votre projet de base de données ne disparaissent pas même après avoir supprimé la cause de l'erreur et régénéré votre projet. Par exemple, si vous supprimez le fichier .sqlpermissions référencé par votre projet à l'aide de l'Explorateur Windows, une erreur se produit, comme prévu. Si vous utilisez l'Explorateur de solutions pour supprimer le fichier de votre projet, puis lancez une régénération, l'erreur persiste bien que vous l'ayez corrigé.

Notes

Pour résoudre ce problème, vous devez le bouton Réanalyser le projet dans la barre d'outils de l'Explorateur de solutions.

Syntaxe incorrecte dans le script de post-déploiement

Par défaut, le mode SQLCMD est désactivé dans l'éditeur Transact-SQL de Visual Studio 2010. Cette modification a été apportée car Intellisense n'est pas actif lorsque le mode SQLCMD est activé. Lorsque vous déployez, l'erreur suivante peut se produire si vous avez inclus des instructions dans votre script de post-déploiement.

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

Notes

Pour résoudre ce problème, vous devez activer le mode SQLCMD. Pour activer le mode SQLCMD, cliquez sur Mode SQLCMD dans la barre d'outils de l'éditeur Transact-SQL.

Voir aussi

Tâches

Comment : modifier des objets de base de données

Comment : comparer et synchroniser les données de deux bases de données

Concepts

Renommer toutes les références à un objet de base de données

Renommer toutes les références à un objet de base de données

Historique des modifications

Date

Historique

Motif

Juillet 2010

Ajout d'une entrée pour informer les utilisateurs d'une modification dans le comportement par défaut de Visual Studio 2010 qui peut provoquer des problèmes pour leur script de post-déploiement.

Commentaires client.