@ переменные не являются DECLAREd, а объявленные идентификаторы переменных не начинаются с @.
Кроме того, операторы ALTER обычно воссоздают таблицу за кулисами (что-то вроде CREATE TABLE newversion ... INSERT INTO newversion SELECT * FROM oldversion ... DROP TABLE oldversion ... RENAME newversion). Так что вам было бы гораздо лучше создать в цикле один оператор ALTER и выполнить его только один раз.
Пример:
...
SET @FooA = 'ALTER TABLE DRIVE_MASTER';
SET x = 0;
WHILE (x <= 150) DO
SET sn = CONCAT('drivesn_', x);
SET dr = CONCAT('driveinf_', x);
SET @FooA = CONCAT(@FooA
, CASE WHEN x != 0 THEN ', ' ELSE '' END
, 'ADD ', sn, ' VARCHAR(30), ADD ', dr, ' VARCHAR(48)'
);
SET x = x + 1;
END WHILE;
EXEC sp_executesql @FooA;
...
... но то, что Бармар сказал в комментариях, является хорошим советом, вам, вероятно, нужно просто иметь другую таблицу, что-то вроде DRIVE_MASTER_DETAILS(x int, sn VARCHAR(30), dr VARCHAR(48))