Visual Studio: используйте переменные SQLCMD для изменения типов БД во время развертывания


У нас есть проект БД в Visual Studio, и он производит .файл dacpac. Затем мы используем этот dacpac с sqlcommand.exe для развертывания нашей базы данных. Наше требование состоит в том, чтобы иметь возможность изменять типы столбцов во время развертывания, так же как мы можем изменить имя базы данных с помощью команды sqlcommand.exe-переключатели. Например:

    :setvar CHARTYPE "VARCHAR"

    ALTER TABLE tempTable ADD newColumn $(CHARTYPE)(200);
    --or
    DECLARE @tempVar $(CHARTYPE)(200);

Этот SQL отлично работает через SSMS, однако попытка сделать это через Visual Studio оказывается трудной.

Я создал переменную SqlCmd в свойствах проекта и я использую его в теле хранимой процедуры:

DECLARE @TempVar $(CHARTYPE)(100)

Но это не работает. Мой проект БД не строится и выдает синтаксическую ошибку в @TempVar.

Если я использую переменную SqlCmd в кавычках ' $(CHARTYPE)', это нормально и выглядит как строковый литерал 'VARCHAR'.

Я включил режим SqlCmd при построении проекта, и это ничего не изменило. Как заставить Visual Studio понять, что я использую переменные SqlCmd?

1 2

1 ответ:

Невозможно использовать переменные SqlCmd в произвольных точках хранимой процедуры. Однако их можно использовать в сценарии до или после развертывания.

Http://social.msdn.microsoft.com/Forums/sqlserver/en-US/da4bdb11-fe42-49db-bb8d-288dd1bb72a2/sqlcmd-vars-in-create-table-script?forum=ssdt