Проект базы данных Visual Studio 2010, позволяющий создавать хранимую процедуру с недопустимым SQL

У меня есть проект базы данных, указанный как 2005. (Это находится на экране свойств в настройках проекта.)

У нас есть несколько серверов, которые мы развертываем и запускаем в рабочей среде 2005 года, но у нас есть несколько серверов 2008 R2, для которых мы разрабатываем, поэтому мы указываем проект как 2005 год.

Я добавил хранимую процедуру, которую я создал в базе данных 2008R2, которая используется только для разработки. Все работает нормально, поэтому я добавил его в проект базы данных. Проект создан и развернут нормально, что означает, что он генерирует файл .sql. Мы не применяем изменения из VS Project.

У нас есть сборка CI TFS, которая работает с базой данных 2005 года. (у нас есть несколько конфигураций, каждая из которых «развертывается» в другой базе данных). Он построил и развернул нормально. Опять же, он только сгенерировал обновления в файл SQL.

Сохраненный процесс содержит следующий код:

    insert SiteCAChargeParameterSet
    values (
             ( select siteID 
                 from SiteCAChargeParameterSet
                where SiteCAChargeParameterSetID = @OldSiteCAChargeParameterSet
              ),
                @NewSetName,0,0,@UserID, @currentDate,@UserID, @currentDate
            )

Все переменные определены. Когда я пытаюсь создать этот хранимый процесс в базе данных 2005 года, я получаю сообщение об ошибке (1046), указывающее, что выбор не разрешен. «Подзапросы не разрешены в этом контексте».

Мой вопрос в том, почему компилятор разрешает это. Очевидно, поскольку я указал, что это проект SQL Server 2005, он должен следовать правилам для этой версии. Кроме того, поскольку он сравнивается с базой данных 2005 года для развертывания, следует также знать, что это незаконно.

Я надеюсь, что где-то есть опция, которую я не включил, или что-то в этом роде. Или это просто ошибка в "компиляторе" SQL.


person Kevin Sedota    schedule 22.08.2012    source источник


Ответы (2)


Попробуйте установить уровень совместимости базы данных на сервере 2008r2 на 90 (SQL Server 2005).

ALTER DATABASE <database_name>
SET COMPATIBILITY_LEVEL = 90 

Это может позволить обнаружение несовместимого подвыбора.

person Spevy    schedule 06.10.2012

Если вы этого не сделали, попробуйте отредактировать целевое соединение на вкладке «Отладка» страницы свойств вашего проекта и убедитесь, что оно указывает на базу данных SQL 2005.

Это гарантирует, что VS проверит правильную версию SQL для вашего проекта.

person Steve G.    schedule 10.09.2012