Как добавить мое условие на объединенный запрос SQL Сервер - PullRequest
0 голосов
/ 24 января 2020

Я хочу добавить условие моего динамического c в мой запрос SQL Server, но обнаружил, что должен использовать каскадный запрос.

Я новичок в каскадном запросе. Ниже приведен запрос, который я пробовал, но с ошибкой неверный системный синтаксис.

DECLARE @value VARCHAR(500) = ' and ID IN (1,2)';
DECLARE @sql VARCHAR(MAX);


SET @sql = '
DECLARE @table TABLE
(
    ID INT,
    Amount INT,
    Name VARCHAR(500)
);

DELETE FROM @table
INSERT INTO @table
(
    ID,
    Amount,
    Name
)
VALUES
(1, 200, ''ab''),
(2, 300, ''ab''),
(3, -150, ''ac''),
(4, 200, ''ab'');

select SUM(Amount)
from @table
where name = ''ab'' ''' + @value + ''';';
EXEC (@sql);

Как правильно добавить переменную запроса условия в мой составной запрос.

Ответы [ 3 ]

1 голос
/ 24 января 2020

Проблемы с вашим кодом:

  • отсутствует полуколонца в конце оператора delete
  • извлечь цитату после where name = ''ab'' и в конце кода

Это должно работать:

DECLARE @value VARCHAR(500) = ' and ID IN (1,2)';
DECLARE @sql VARCHAR(MAX);

SET @sql = '
DECLARE @table TABLE
(
    ID INT,
    Amount INT,
    Name VARCHAR(500)
);

DELETE FROM @table;
INSERT INTO @table
(
    ID,
    Amount,
    Name
)
VALUES
(1, 200, ''ab''),
(2, 300, ''ab''),
(3, -150, ''ac''),
(4, 200, ''ab'');

select SUM(Amount)
from @table
where name = ''ab'' ' + @value + ';';
EXEC(@sql);

Примечания:

  • это называется Dynami c SQL скорее чем каскадный запрос
  • простой способ отладки такого кода состоит в замене команды EXEC(@sql) на SELECT @sql, что позволяет увидеть SQL, сгенерированный вашим кодом; в этой БД Fiddle вы можете увидеть результат:
DECLARE @table TABLE
(
    ID INT,
    Amount INT,
    Name VARCHAR(500)
);

DELETE FROM @table;
INSERT INTO @table
(
    ID,
    Amount,
    Name
)
VALUES
(1, 200, 'ab'),
(2, 300, 'ab'),
(3, -150, 'ac'),
(4, 200, 'ab');

select SUM(Amount)
from @table
where name = 'ab'  and ID IN (1,2);
1 голос
/ 24 января 2020

Привет использовать ниже изменить запрос

DECLARE @value VARCHAR(500) = ' and ID IN (1,2)';
DECLARE @sql VARCHAR(MAX);


SET @sql = '
DECLARE @table TABLE
(
    ID INT,
    Amount INT,
    Name VARCHAR(500)
);

DELETE FROM @table
INSERT INTO @table
(
    ID,
    Amount,
    Name
)
VALUES
(1, 200, ''ab''),
(2, 300, ''ab''),
(3, -150, ''ac''),
(4, 200, ''ab'');

select SUM(Amount)
from @table
where name = ''ab''' + @value+';'
EXEC (@sql);

Запрос вывода: 500

1 голос
/ 24 января 2020

Вы можете удалить лишние кавычки:

where name = ''ab'' ' + @value + ';';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...