Я использую Microsoft SQL Server, я хочу написать динамический SQL-запрос, который обновит строку, проверив различные столбцы в предложении WHERE.
Столбцы в предложении WHERE имеют формат X1, X2, ..., X10 - поэтому я хочу использовать @cnt в качестве счетчика, объединенного с именем столбца X на каждой итерации.
Я получаю сообщение об ошибке:
Журнал транзакций для базы данных DBName:
заполнен из-за 'LOG_BACKUP'
Если я напишу запрос 10 раз, он будет работать нормально, так что это должно быть что-то с циклом или преобразованием int в char
Пока это мой запрос - добавлены все важные части:
@y char(3) //SP Parameter
DECLARE @table varchar(50)
DECLARE @sql varchar(max)
DECLARE @cnt INT = 1
DECLARE @count VARCHAR(2)
SET @table = CONCAT('X_',@y)
WHILE @cnt <= 10
SET @count = CAST(@cnt as VARCHAR);
BEGIN
SET @sql = CONCAT('UPDATE ',@table,' SET X1 = CASE WHEN X1 <> '''' THEN X1 ELSE ''VALUE'' END,
X2 = CASE WHEN X1 = '''' or X2 <> '''' THEN X2 ELSE ''VALUE'' END,
X3 = CASE WHEN X2 = '''' or X3 <> '''' THEN X3 ELSE ''VALUE'' END,
X4 = CASE WHEN X3 = '''' or X4 <> '''' THEN X4 ELSE ''VALUE'' END,
X5 = CASE WHEN X4 = '''' or X5 <> '''' THEN X5 ELSE ''VALUE'' END,
X6 = CASE WHEN X5 = '''' or X6 <> '''' THEN X6 ELSE ''VALUE'' END,
X7 = CASE WHEN X6 = '''' or X7 <> '''' THEN X7 ELSE ''VALUE'' END,
X8 = CASE WHEN X7 = '''' or X8 <> '''' THEN X8 ELSE ''VALUE'' END,
X9 = CASE WHEN X8 = '''' or X9 <> '''' THEN X9 ELSE ''VALUE'' END,
X10 = CASE WHEN X9 = '''' or X10 <> '''' THEN X10 ELSE ''VALUE'' END
WHERE X'+@count+' IN (SELECT P_CODE FROM P WHERE DESCRIPTION LIKE ''%new%'' AND Y= ''',@y,''');
EXEC (@sql);
SET @cnt=@cnt+1;
END