2015-01-03 3 views
0

내 데이터베이스의 모든 테이블에서 ABCDEF 열을 삭제하고 싶습니다. 이 코드 노력하고 있어요 :SQL Server의 모든 테이블에서 열을 삭제하는 방법

declare @SQL nvarchar(max) 

SELECT 
    @SQL = STUFF((SELECT ' DROP column ' + quotename(TABLE_SCHEMA) + '.' + quotename(table_NAME) +'.ABCDEF;' 
FROM 
    information_schema.columns 
FOR XML PATH('')),1,2,'') 

PRINT @SQL 

EXECUTE (@SQL) 

을하지만 어떻게 이렇게 오류

근처

잘못된 구문이 무엇입니까?

답변

5

당신은 SQL 서버 sys.sp_msforeachtable의 문서화되지 않은 기능을 사용할 수 있습니다. 아래 스크립트는 기본적으로 데이터베이스에있는 모든 테이블을 반복하고 필요할 경우 alter입니다.

select '[dbo].['+tab.name+']' name into #table from 
sys.tables tab join sys.columns col on tab.object_id = col.object_id and col.name = 'ABCDEF' 

exec sys.sp_msforeachtable 'if exists (select 1 from #table where name = ''?'') 
alter table ? drop column [ABCDEF]' 
2

테이블에서 열을 삭제하는 올바른 방법은 아닙니다. 그것은

ALTER TABLE table_name DROP COLUMN column_name 

이처럼 dynamic query 뭔가를 구축해야한다 :

DECLARE @sql NVARCHAR(max)='' 

SELECT @SQL += 'Alter table ' + Quotename(table_catalog) 
       + '.' + Quotename(table_schema) + '.' 
       + Quotename(TABLE_NAME) + ' DROP column ' 
       + Quotename(column_name) + ';' 
FROM information_schema.columns where COLUMN_NAME = 'abcd' -- Here alone mention 
                  --the Column to be removed 

EXEC Sp_executesql @sql 
관련 문제