2015-01-14 11 views
10

In Visual Studio 2013, ho creato un progetto di database e importato un database esistente. All'inizio tutto andava bene, e il progetto costruiva e produceva script.Visual Studio ritiene che la sintassi SQL corretta non sia corretta

Tuttavia, ora Visual Studio sembra pensare che ci siano errori di sintassi SQL, restituendo diversi errori SQL46010: Incorrect syntax near:. Questi sono tutti dal codice generato da VS - non ne ho scritto nulla.

Esempio 1:

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

Esempio 2:

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

Se copio/incolla il codice in SQL Server Management Studio, tutto funziona bene.

Sfortunatamente, questi impediscono la costruzione del progetto, il che significa che non posso pubblicare. Poiché si tratta di errori, non di avvisi, non posso impostarli per essere ignorati nelle impostazioni del progetto.

Esiste una soluzione alternativa in cui è possibile impostare i file dei problemi "Crea azione su Nessuno, ma ho bisogno di questi file inclusi quando pubblico.

ho provato:

  • Eliminazione e ri-aggiungendo lo stesso codice
  • copiare il codice/incollare al nuovo file SQL
  • chiudere e riaprire la soluzione
  • di chiusura e riapertura visiva Studio
  • Aggiornamento strumenti di dati Microsoft SQL Server (SSDT) ​​
  • Aggiornamento g Visual Studio

Il problema più vicina che ho potuto trovare è this MSDN thread dal 2012, affermando che c'è un parser SQL bug SSDT (che mi ha spinto a provare ad aggiornare SSDT).

risposta

21

Esiste un'impostazione nelle proprietà del progetto denominata Target platform che indica a VS quale versione di SQL Server deve essere verificata la sintassi.

Queste sono aggiunte relativamente nuove alla sintassi T-SQL e potrebbero non funzionare se la sintassi è stata impostata su es. SQL Server 2005.

Visual Studio 2013 database project settings

0

Vecchio thread, ma questo mi ha interferito in modo ho pensato di condividere la mia esperienza, la documentazione per ALTER ROLE sembra indicare che esso è supportato su SQL 2008, quando in realtà solo parte della funzionalità è. È possibile utilizzare per modificare il nome di un ruolo, ad esempio ALTER ROLE [ROLE NAME] WITH [NEW ROLE NAME] Ma per aggiungere o rimuovere membri dal ruolo è necessario utilizzare la stored procedure precedente (e ora deprecata) sp_addrolememeber i sp_addrolemember 'Role Name', 'User Name'.
Come sottolinea Aaroninus se si targetizza SQL 2012 o versione successiva, questo non verrà segnalato come errore.

0

dover impostare un flag nel progetto è davvero stupido dato che ho script ddl sql sia in oracle che in mssql all'interno del mio progetto di classe C#.

Problemi correlati