2015-01-14 11 views
10

W Visual Studio 2013 utworzyłem projekt bazy danych i zaimportowałem istniejącą bazę danych. Na początku wszystko było w porządku, a projekt zbudowany i wyprodukowany tworzył skrypty.Visual Studio uważa poprawną składnię SQL za niepoprawną

Jednak teraz Visual Studio wydaje się myśleć, że są błędy składni SQL, zwracając kilka błędów SQL46010: Incorrect syntax near:. To wszystko z kodu wygenerowanego przez VS - nie napisałem nic z tego.

Przykład 1:

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

Przykład 2:

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

Gdybym kopiuj/wklej kod do SSMS, wszystko działa bez zarzutu.

Niestety uniemożliwiają one budowę projektu, co oznacza, że ​​nie mogę opublikować. Ponieważ są to błędy, a nie ostrzeżenia, nie mogę ustawić ich ignorowania w ustawieniach projektu.

Istnieje sposób obejścia problemu, w którym można ustawić działanie plików kompilacji na Brak, ale potrzebne są te pliki podczas publikowania.

Próbowałem:

  • Usuwanie i ponowne dodanie tego samego kodu
  • Kopiuj kod/wklejanie do nowego pliku SQL
  • zamknięciu i ponownym otwarciu roztworowi
  • zamknięciu i ponownym otwarciu wizualna Studio
  • Aktualizacja narzędzi danych serwera Microsoft SQL Server (SSDT) ​​
  • Updatin g Visual Studio

Najbliżej problemu udało mi się znaleźć to this MSDN thread od 2012 roku, stwierdzając, że istnieje SQL parser bug SSDT (co skłoniło mnie do próby aktualizowania SSDT).

Odpowiedz

21

Istnieje ustawienie we właściwościach projektu o nazwie Target platform, która informuje VS, w jakiej wersji programu SQL Server sprawdzana jest składnia.

Są to stosunkowo nowe dodatki do składni T-SQL i mogą nie działać, jeśli ustawiono na przykład składnię. SQL Server 2005.

Visual Studio 2013 database project settings

0

stary wątek, ale to nie złapać mnie więc pomyślałem, że podzielę się moim doświadczeniem, dokumentacja dla ALTER ROLE wskazuje na to, że jest ona obsługiwana w SQL 2008, gdy w rzeczywistości tylko częścią tej funkcjonalności jest. Użytkownik może użyć Alter Role, aby zmienić nazwę roli, np. ALTER ROLE [ROLE NAME] WITH [NEW ROLE NAME] Ale aby dodać lub usunąć członków z roli, należy użyć starej (i obecnie nieaktualnej) procedury składowanej sp_addrolememeber, tj. sp_addrolemember 'Role Name', 'User Name'.
Jak wskazuje Aaroninus, jeśli celujesz w SQL 2012 lub później, nie będzie on zgłaszany jako błąd.

0

Konieczność ustawienia flagi w projekcie jest naprawdę głupia, ponieważ mam skrypty ddl sql w oracle i mssql wewnątrz mojego projektu klasy C#.

Powiązane problemy