Visual Studio считает неправильный синтаксис SQL
В Visual Studio 2013 я создал проект базы данных и импортировал существующую базу данных. Сначала все было хорошо, и проект был построен и создан, создавая сценарии.
Однако теперь 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
- Закрытие и повторное открытие решения
- Закрытие и повторное открытие Visual Studio
- Обновление инструментов данных SQL Server SQL Server (SSDT)
- Обновление Visual Studio
Ближайшей проблемой, которую я смог найти, является этот поток MSDN с 2012 года, заявив, что есть ошибка SQL-анализатора SSDT (который запрашивал мне попробовать обновить SSDT).
Ответы
Ответ 1
В свойствах проекта, называемых Target platform
, указан параметр, который указывает VS, какую версию SQL Server проверяет на синтаксис.
Это относительно новые дополнения к синтаксису T-SQL, и они могут не работать, если синтаксис был установлен, например. SQL Server 2005.
![Visual Studio 2013 database project settings]()
Ответ 2
Старый поток, но это меня выловило, поэтому я решил поделиться своим опытом, документация для ALTER ROLE, по-видимому, указывает на то, что она поддерживается в SQL 2008, когда на самом деле только часть функциональности. Вы можете использовать Alter Role для изменения имени роли i.e. ALTER ROLE [ROLE NAME] WITH [NEW ROLE NAME]
Но для добавления или удаления членов из роли необходимо использовать старую (и теперь устаревшую) хранимую процедуру sp_addrolememeber i.e. sp_addrolemember 'Role Name', 'User Name'
.
Как указывает Ааронинус, если вы настроите таргетинг на SQL 2012 или позже, это не будет отображаться как ошибка.
Ответ 3
чтобы установить флаг в проекте, действительно глупо, поскольку у меня есть ddl sql-скрипты в oracle и mssql внутри моего проекта класса С#.
Ответ 4
В моем случае я добавлял уже существующий сценарий после развертывания (файл .sql), щелкнув папку с именем "Справочные данные" ==> Добавить существующий элемент ==> Выбрать список файлов .sql, включая файл Script.PostDeployment1.sql. При нажатии F5 выдавалась следующая ошибка:
SQL46010: Неверный синтаксис рядом с:.
содержимое файла sql:
:r ".\Customer.data.sql"
GO
:r ".\Product.data.sql"
GO
:r ".\OrderType.data.sql"
GO
:r ".\Orders.data.sql"
GO
Решение:
Сценарий после развертывания должен быть создан с использованием VS. В существующем проекте откройте Visual Studio и добавьте сценарий после развертывания, нажав: Добавить ==> Новый элемент ==> Сценарий ==> Сценарий после развертывания ==>. PostDeployment1.sql.After Для создания файла PostDeployment1.sql просто скопируйте и вставьте содержимое, а затем нажмите клавишу F5..PostDeployment1.sql должна выполняться без ошибок.