2015-01-14 5 views
10

В Visual Studio 2013 я создал проект базы данных и импортировал существующую базу данных. Сначала все было хорошо, и в проекте были созданы и созданы сценарии создания.Visual Studio считает неправильный синтаксис SQL

Однако, Visual Studio, похоже, считает, что есть синтаксические ошибки SQL, возвращая несколько ошибок SQL46010: Incorrect syntax near:. Все это из кода, созданного VS - я ничего не написал.

Пример 1:

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

Пример 2:

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

Если скопировать/вставить код в SSMS, все работает отлично.

К сожалению, это препятствует строительству проекта, что означает, что я не могу публиковать. Поскольку они являются ошибками, а не предупреждениями, я не могу их игнорировать в настройках проекта.

Обходной путь существует, где я могу установить файлы проблем «Build Action to None», но мне нужно, чтобы эти файлы включались при публикации.

Я попытался:

  • Удаление и повторное добавление тот же код
  • Скопировать код/​​вставить в новый файл SQL
  • Закрытие и повторное открытие раствора
  • Закрытие и повторное открытие Визуальное Studio
  • Обновление инструментов данных SQL Server SQL Server (SSDT) ​​
  • Updatin г Visual Studio

Ближайшая проблема, которую я смог найти это this MSDN thread с 2012 года, о том, что есть ошибка SSDT SQL парсер (что побудило меня попробовать обновить SSDT).

ответ

21

В свойствах проекта есть Target platform, в котором говорится, VS версия SQL Server для проверки синтаксиса.

Это относительно новые дополнения к синтаксису T-SQL, и они могут не работать, если синтаксис был установлен, например. SQL Server 2005.

Visual Studio 2013 database project settings

0

Старый нить но это поймать меня, так что я думал, что я хотел бы поделиться своим опытом, документация для ALTER РОЛИ, кажется, указывает, что она опирается на SQL 2008 года, когда на самом деле только часть функциональности. Вы можете использовать Использовать Alter Роль для изменения имени роли i.e ALTER ROLE [ROLE NAME] WITH [NEW ROLE NAME] Но для добавления или удаления членов из роли необходимо использовать старую (и теперь устаревшую) хранимую процедуру sp_addrolememeber i.e. sp_addrolemember 'Role Name', 'User Name'.
Как указывает Ааронинус, если вы настроили таргетинг на SQL 2012 или позже, это не будет отображаться как ошибка.

0

, чтобы установить флаг в проекте, действительно глупо, так как у меня есть ddl sql-скрипты в oracle и mssql внутри моего проекта класса C#.

 Смежные вопросы

  • Нет связанных вопросов^_^