web-dev-qa-db-fra.com

Visual Studio pense que la syntaxe SQL correcte est incorrecte

Dans Visual Studio 2013, j'ai créé un projet de base de données et importé une base de données existante. Au début, tout allait bien, et le projet a construit et produit des scripts de création.

Cependant, Visual Studio semble maintenant penser qu'il existe des erreurs de syntaxe SQL, renvoyant plusieurs erreurs SQL46010: Incorrect syntax near:. Ce sont tous du code généré par VS - je n'ai rien écrit.

Exemple 1:

ALTER ROLE [db_owner] ADD MEMBER [SomeUser];
SQL46010: Incorrect syntax near ADD.

Exemple 2:

DECLARE @Foo NVARCHAR(7) = 'abcdefg';
SQL46010: Incorrect syntax near =.

Si je copie/colle le code dans SSMS, tout fonctionne correctement.

Malheureusement, cela empêche la construction du projet, ce qui signifie que je ne peux pas publier. S'agissant d'erreurs et non d'avertissements, je ne peux pas les ignorer dans les paramètres du projet.

Il existe une solution de contournement dans laquelle je peux définir l'action de génération des fichiers problématiques sur Aucune, mais ces fichiers doivent être inclus lors de la publication.

J'ai essayé:

  • Supprimer et rajouter le même code
  • Copier/coller du code dans un nouveau fichier SQL
  • Fermeture et réouverture de la solution
  • Fermeture et réouverture de Visual Studio
  • Mise à jour des outils de données Microsoft SQL Server (SSDT)
  • Mise à jour de Visual Studio

Le problème le plus proche que j'ai pu trouver est ce fil MSDN datant de 2012, indiquant qu'il existe un analyseur syntaxique SQL SSDT (qui m'a incité à essayer de mettre à jour SSDT).

12
Aaroninus

Il existe un paramètre dans les propriétés du projet appelé Target platform qui indique à quelle version de SQL Server vérifier la syntaxe.

Ce sont des ajouts relativement nouveaux à la syntaxe T-SQL, et ils pourraient ne pas fonctionner si la syntaxe était définie sur ex. SQL Server 2005.

Visual Studio 2013 database project settings

23
GSerg

Ancien fil de discussion, mais cela m’a pris au dépourvu, j’ai pensé partager mon expérience. La documentation d’ALTER ROLE semble indiquer qu’elle est prise en charge par SQL 2008 alors qu’une partie seulement de ses fonctionnalités l’est. Vous pouvez utilisez Alter Role pour changer le nom d’un rôle, c.-à-d. ALTER ROLE [ROLE NAME] WITH [NEW ROLE NAME] Mais pour ajouter ou supprimer des membres du rôle, il est nécessaire d’utiliser la procédure stockée ancienne (et maintenant dépréciée) sp_addrolememeber i.e. sp_addrolemember 'Role Name', 'User Name'.
Comme le souligne Aaroninus, si vous ciblez SQL 2012 ou une version ultérieure, cela ne sera pas signalé comme une erreur.

1
Code Ranger

le fait de devoir définir un drapeau dans le projet est vraiment stupide, car j’ai des scripts SQL au format Ddl dans Oracle et dans le mssql de mon projet de classe c #.

0
Andreas