Проблемы с вашим кодом:
- отсутствует полуколонца в конце оператора
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);