динамически создаваемый запрос - SQL - PullRequest
0 голосов
/ 07 июня 2018

Таблица

Я пытаюсь создать динамический запрос в SQL, который добавляет столбец «Выписка» на основе «Параметры поля», как показано в таблице Image.(Пожалуйста, обратитесь к прилагаемому рисунку таблицы)

Если «Параметры поля» = A, тогда Имя поля = «ОДНО ПЛАТА».Затем следует заполнить столбец «Выписка» как «ВЫБЕРИТЕ ОДНОВРЕМЕННУЮ ПЛАТУ» ...

Как я могу использовать курсор для итераций по каждой строке моей таблицы и построения для меня третьего столбца под названием'Statement'?

enter codeDECLARE @field_option nvarchar(max) = 'B'
DECLARE @field_name nvarchar(max)

DECLARE @statement nvarchar(max)

IF @field_option = 'A'
BEGIN
    SET @field_name = 'Single Pay'
    SET @statement = 'SELECT '+ @field_name+'...'
    SELECT @field_option AS 'Field_Option', @field_name            AS 'Field_Name', @statement AS 'Statement'
    INTO new_table
    SELECT * FROM new_table;
END

ELSE IF @field_option = 'B'
BEGIN
    SET @field_name = 'Double Pay'
    SET @statement = 'SELECT '+ @field_name+'...'
    SELECT @field_option AS 'Field_Option', @field_name     AS 'Field_Name', @statement AS 'Statement'
    INTO new_table
    SELECT * FROM new_table;
END here

Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь выполнить запрос второй раз, например, с опцией «B», я получаю сообщение об ошибке «Уже существует объект с именем« new_table »'в базе данных. "

Как добавить новую строку в мою существующую" new_table "?Может кто-нибудь, пожалуйста, руководство?

1 Ответ

0 голосов
/ 07 июня 2018

Это должно сделать это:

DECLARE @field_option nvarchar(max) = 'B'
DECLARE @field_name nvarchar(max)
DECLARE @statement nvarchar(max)

IF OBJECT_ID('new_table') IS NOT NULL
    DROP TABLE new_table

IF @field_option = 'A'
BEGIN
    SET @field_name = 'Single Pay'
    SET @statement = 'SELECT '+ @field_name+'...'
    SELECT @field_option AS 'Field_Option', @field_name            AS 'Field_Name', @statement AS 'Statement'
    INTO new_table
    SELECT * FROM new_table;
END

ELSE IF @field_option = 'B'
BEGIN
    SET @field_name = 'Double Pay'
    SET @statement = 'SELECT '+ @field_name+'...'
    SELECT @field_option AS 'Field_Option', @field_name     AS 'Field_Name', @statement AS 'Statement'
    INTO new_table
    SELECT * FROM new_table;
END

После того, как вы запустили оператор один раз (во время тестирования, я бы догадался), таблица была создана.Теперь он там и не уходит сам по себе.Так что бросьте проверку, чтобы увидеть, существует ли она наверху, и бросьте ее.В качестве альтернативы вы можете использовать:

  • # временных таблиц
  • табличных переменных
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...