2015-01-15 2 views
5

Я использую Microsoft SQL Server, и кажется, что я не могу обойти эту проблему.SQL Server: drop column @variable не работает

У меня есть таблица, на которой у меня будут динамические и статические столбцы.

Статические столбцы будут наименованием продукта, типа продукта, а динамическими данными будут некоторые данные о производстве из текущих месяцев.

В каждом начале месяца я должен отказаться от динамических столбцов в прошлом месяце и добавить новый месяц до конца таблицы

Мое решение было сохранение имя столбца в локальную переменную а затем добавив его в оператор alter. Но это не работает, он продолжает давать мне ошибку, как в:

Msg 102, Level 15, State 1, Line 18
Неправильный синтаксис около '@month_b'

Я теперь будет добавить запросы

declare @month_t char(15) 
declare @month_b char(15) 
declare @sql char(30) 

set @month_b = (SELECT top 1 name 
       FROM sys.columns 
       WHERE object_id = OBJECT_ID('dbo.ct_test') 
        AND name != 'TTNR' AND name != 'Family' AND name like '%B%' 
       ORDER BY name ASC) 

set @month_t = (SELECT top 1 name 
       FROM sys.columns 
       WHERE object_id = OBJECT_ID('dbo.ct_test') 
        AND name != 'TTNR' AND name != 'Family' AND name like '%T%' 
       ORDER BY name ASC) 

alter table ct_test 
    drop column @month_b 

Я не могу найти решение этого вопроса, вы можете мне помочь.

Спасибо заранее

+0

Это не похоже, хороший дизайн, кстати. Регулярное добавление и удаление столбцов - это запах кода для меня. –

ответ

4

Вы должны использовать Dynamic Query

Declare @sql nvarchar(max) 

set @sql = 'alter table ct_test drop column '+ @month_b 

Exec sp_executesql @sql 

set @sql = 'alter table ct_test drop column '+ @month_t 

Exec sp_executesql @sql 
+0

Это еще одна ошибка: Msg 214, уровень 16, состояние 2, процедура sp_execute, строка 1 Процедура ожидает параметр '@handle' типа 'int'. –

+0

@CaluserIstvan - извините, это должно быть 'sp_executesql' вместо' sp_execute'. Обновлен check now –

+0

Спасибо, это работает !! –