나는 테이블의 내용을 통해 해당 루프를 생성하는 코드를 찾아 내고 여전히 유효한 열인지 확인하고 더 이상 유효하지 않은 열을 모두 삭제합니다. 어떤 이유로 EXECUTE에 대한 테이블에서 열을 삭제
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
다른 모든 호출을 건너 뛸 코드의 원인,하지만 난 꺼내 경우, 모든 유효한 드롭 문을 표시합니다 코멘트와 함께 실행하고 인쇄 던져된다. 나는이 일을 시도
:
SET @temp_sql = @temp_swl + 'ALTER TABLE test DROP column ' + @col_name
enter code here
나는 한 번에 모든 ALTER 테이블을 결합하는 시도했지만 작동하지 않는 것 같습니다.
나는 작은 것을 놓치고 있다고 느낍니다.
새 테이블에 유효한 열을 밀어 넣은 다음 이전 테이블을 삭제하고 새 테이블의 이름을 바꾸는 것이 궁금합니다. – brian
@brian 그것은 많은 양의 데이터 일 수 있으며, 보관중인 열을 가리키는 많은 외래 키가있을 수 있습니다. –
솔직히, 나는 생각하지 않았기 때문에 :-), 가능하다면 데이터를 유지하려고합니다. dev가 테이블을 완전히 삭제하려고하거나, 단순히 "업데이트"하려는 경우 "재설정"플래그가 있습니다. 그것. 나는 아직도 놀고있어 모든 것을 마무리하고있다. 나는 이것을 염두에 둘 것이다! – Krum110487