Проблема преобразования параметра имени сервера и базы данных в проекте Dacpack в Azure DevOps release pipeline (вызывает лишнюю скобку)

Вопрос или проблема

У меня есть проект SQL DB, созданный в VS 2022. В нем есть хранимая процедура, и я параметризовал сервер и базу данных, так как она подключается к другому серверу с помощью связанного сервера. Я создал сборку в Azure DevOps и выпустил из нее с параметром, который я использовал в этих хранимых процедурах. Когда я развертываю dacpac в Azure DevOps, он преобразует эту переменную, но добавляет лишнюю скобку.

Я определил $(UserServerAndDB) как переменную SQLCMD в моем проекте базы данных. Моя хранимая процедура USP_GetUser.sql выглядит так в проекте базы данных.

CREATE PROCEDURE [dbo].[USP_GetUser]
@userId nvarchar(16)
AS
BEGIN
SELECT UserId, UserName
FROM [$(UserServerAndDB)].[dbo].[User]
WHERE UserId = @userId;
END

Теперь в Azure DevOps я собрал проект базы данных, и у меня есть dacpac в артефактах. Я создал конвейер выпуска из этого артефакта и там я использовал Задачу развертывания базы данных SQL Server для развертывания моего Dacpack. Это работает отлично. Однако моя переменная, которую я создал в конвейере выпуска, называется UserServerAndDB со значением для USER_D_LK].[User, неправильно преобразуется. Я добавил ее как дополнительные аргументы к этой задаче /v:UserServerAndDB=$(UserServerAndDB) к задаче Развертывание базы данных SQL Server, см. ниже.

введите описание изображения здесь

Но когда она завершает развертывание БД

вместо

CREATE PROCEDURE [dbo].[USP_GetUser]
    @userId nvarchar(16)
AS
BEGIN
    SELECT UserId, UserName
    FROM **[USER_D_LK].[User]**.[dbo].[User]
    WHERE UserId = @userId;
END

Ко мне поступила большая помощь!

он создает ниже и добавляет 2 скобки. Очень странно, откуда берутся эти лишние скобки.

CREATE PROCEDURE [dbo].[USP_GetUser]
    @userId nvarchar(16)
AS
BEGIN
    SELECT UserId, UserName
    FROM **[USER_D_LK].[User]]**.[dbo].[User]
    WHERE UserId = @userId;
END

Ответ или решение

Решение проблемы с преобразованием параметров сервера и БД в проекте SQL DACPack с использованием Azure DevOps

Ваша проблема с добавлением лишней скобки при преобразовании параметра UserServerAndDB в проекте SQL на платформе Azure DevOps вызвана неправильным синтаксисом при формировании строки подключения к базе данных. Рассмотрим более подробно, как можно исправить это, чтобы ваш DACPack развертывался правильно.

Определение проблемы

Судя по вашему описанию, вы создали хранимую процедуру, которая использует параметризованное имя сервера и базы данных:

CREATE PROCEDURE [dbo].[USP_GetUser]
@userId nvarchar(16)
AS
BEGIN
    SELECT UserId, UserName
    FROM [$(UserServerAndDB)].[dbo].[User]
    WHERE UserId = @userId;
END

При трансформации переменной UserServerAndDB в Azure DevOps вы указываете в параметрах задачи SQL Server database deploy:

/v:UserServerAndDB=$(UserServerAndDB)

Однако, вместо ожидаемого результата:

FROM [USER_D_LK].[dbo].[User]

вы получаете:

FROM [USER_D_LK].[User]][dbo].[User]

Это происходит из-за того, что Azure DevOps неправильно интерпретирует значение переменной, добавляя лишнюю закрывающую скобку.

Решения

1. Проверьте переменную в DevOps

Убедитесь, что значение переменной UserServerAndDB в вашем Azure DevOps Pipeline не включает лишние скобки или пробелы. Вы можете отобразить значение переменной в логах для контроля:

echo $(UserServerAndDB)

2. Измените синтаксис использования SQLCMD

Убедитесь, что вами правильно используется синтаксис SQLCMD. Иногда, если вы указываете значения с лишними пробелами или кавычками, это может вызывать подобные проблемы. Например, попробуйте изменить

/v:UserServerAndDB="$(UserServerAndDB)"

вместо:

/v:UserServerAndDB=$(UserServerAndDB)

3. Проверьте конфигурацию хранимой процедуры

Также следует проверить, как вы определяете свою переменную UserServerAndDB внутри самого SQL проекта. Убедитесь, что она объявлена только один раз и не имеет лишних скобок в контексте использования.

4. Локализация ошибки

Если проблема сохраняется, попробуйте создать отдельный тестовый проект SQL с упрощенной версией вашей процедуры и ее вызова. Это поможет изолировать проблему и выявить, возникает ли она из-за конкретных настроек или конфигураций.

Заключение

Надеюсь, эти рекомендации помогут вам устранить проблему с лишними скобками при использовании параметров в Azure DevOps. Важно внимательно следить за синтаксисом и конфигурациями ваших параметров, так как это основа успешного выполнения развертывания. Если проблема останется, рекомендую обратиться на специализированные форумы или в службу поддержки, где можно будет более детально ознакомиться с вашей конфигурацией и идентифицировать возможные несовпадения.

Оцените материал
Добавить комментарий

Капча загружается...