Я пытаюсь вычислить код для генерации, который проходит через содержимое таблицы и проверяет, действительно ли он является допустимым столбцом и удаляет все столбцы, которые больше недействительны.удалять столбцы из таблицы
declare @counter int
declare @col_count int
declare @col_name char(100)
declare @temp_sql char(100)
set @counter = 0
SELECT @col_count = COUNT(*) from sys.columns
where Object_ID = Object_ID(N'test')
AND name <> 'pk_test'
while @counter < @col_count
begin
with CTE as (
select name, row_number() over (order by column_id) as ColNo
from sys.columns where object_id = object_id('test') AND name <> 'pk_test'
)
select @col_name = name from CTE where ColNo = ((@counter) + 1)
SET @temp_sql = 'ALTER TABLE test DROP column ' + @col_name + ';'
EXECUTE (@temp_sql);
set @counter = @counter + 1
end
по какой-то причине EXECUTE вызывает код, чтобы пропустить любой другой вызов, но если я вывезти выполнить с комментарием и бросить в печати, он будет показывать все действительные заявления падения.
Я попытался сделать это:
SET @temp_sql = @temp_swl + 'ALTER TABLE test DROP column ' + @col_name
enter code here
Я пытался объединить все изменения таблиц сразу, но это не похоже на работу.
Я чувствую, что мне не хватает чего-то маленького!
Просто любопытно, почему бы не толкнуть допустимые столбцы в новую таблицу, а затем отбросить старую таблицу и переименовать новую? – brian
@brian может быть много данных, и может быть много внешних ключей, указывающих на сохраненный столбец. –
откровенно, потому что я не думал об этом :-), также я хочу сохранить данные, если это возможно, у меня есть флаг «reset», если разработчик хочет полностью отказаться от таблицы или просто хочет «обновить», Это. Я все еще собираюсь и дорабатываю все. Я буду помнить об этом! – Krum110487