2015-01-14 17 views
10

In Visual Studio 2013 habe ich ein Datenbankprojekt erstellt und eine vorhandene Datenbank importiert. Am Anfang war alles in Ordnung und das Projekt erstellte und produzierte Skripte.Visual Studio hält die korrekte SQL-Syntax für falsch

Jetzt jedoch scheint Visual Studio zu glauben, dass SQL-Syntaxfehler vorliegen, die mehrere SQL46010: Incorrect syntax near:-Fehler zurückgeben. Diese stammen alle aus dem von VS erzeugten Code - ich habe nichts davon geschrieben.

Beispiel 1:

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

Beispiel 2:

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

Wenn ich/kopieren Sie den Code in SSMS einfügen, funktioniert alles einwandfrei.

Leider verhindern diese das Projekt zu bauen, was bedeutet, dass ich nicht veröffentlichen kann. Da es sich um Fehler handelt, nicht um Warnungen, kann ich nicht festlegen, dass sie in den Projekteinstellungen ignoriert werden.

Es gibt eine Problemumgehung, bei der ich die Build-Aktion der Problemdateien auf None setzen kann, aber ich brauche diese Dateien bei der Veröffentlichung.

Ich habe versucht:

  • Löschen und Wieder Zugabe des gleichen Code
  • Kopieren/Einfügen von Code, um neue SQL-Datei
  • Schließen und Wiedereröffnung der Lösung
  • Schließen und erneuten Öffnen von Visual Studio
  • Aktualisieren von Microsoft SQL Server-Datentools (SSDT) ​​
  • Updatin Visuelles g Studio

Das nächste Problem, das ich in der Lage gewesen zu finden, ist this MSDN thread von 2012, das besagt, dass es ein Fehler SSDT SQL-Parser (die mich dazu veranlassten, um zu versuchen SSDT Aktualisierung).

Antwort

21

In den Projekteigenschaften Target platform gibt es eine Einstellung, die VS mitteilt, in welcher Version von SQL Server die Syntax überprüft werden soll.

Dies sind relativ neue Ergänzungen der T-SQL-Syntax, und sie funktionieren möglicherweise nicht, wenn die Syntax z. SQL Server 2005.

Visual Studio 2013 database project settings

0

alten Thread aber mich verfing, so dachte ich, ich würde meine Erfahrung teilen, scheint die Dokumentation zu ALTER ROLLE, um anzuzeigen, dass es 2008 auf SQL unterstützt, wenn in der Tat nur Teil der Funktionalität ist. Sie können verwenden Alter Role, um den Namen einer Rolle zu ändern, d. H. ALTER ROLE [ROLE NAME] WITH [NEW ROLE NAME] Aber zum Hinzufügen oder Entfernen von Mitgliedern aus der Rolle ist es notwendig, die alte (und jetzt veraltet) gespeicherte Prozedur sp_addrolememeber, d. H. sp_addrolemember 'Role Name', 'User Name'.
Da Aaroninus darauf hinweist, dass Sie SQL 2012 oder später als Ziel verwenden, wird dies nicht als Fehler gemeldet.

0

eine Flagge im Projekt zu setzen ist wirklich dumm, da ich ddl SQL-Skripte in Oracle und Mssql in meinem C# -Klasse-Projekt habe.

Verwandte Themen