2012-05-03 4 views
2

열 이름을 지정하지 않고도 테이블의 모든 열에 alter 문을 적용 할 수 있습니까? 이것은 보고서의 중복 데이터를 정리하는 데 필요한 임시 테이블에서만 사용됩니다. 여기 column_name을 지정하지 않고 모든 열을 변경하는 방법은 무엇입니까?

내가 궁금한 건 무엇의 샘플의 경우의 수 :

select T1.Column1, T1.Column2, T1.Column3, T2.Column1, T2.Column2 
into #templateTable 
from Table1 T1 
join Table2 T2 on T1.Column1 = T2.Column2 

alter table #templateTable 
alter column * null 

정말 필요한 것은이있는 이전하지 않는 원래 데이터를 가져 그 열에 null 값을 허용하는 내 #tempTable입니다 널 값을 허용하십시오. 최소 10 개 테이블에서 당겨지는 많은 열 (~ 50)가있다

  1. :

    마지막으로, 나는 통과하고 각 열을 편집하지 않으려는 두 가지 이유가 있습니다.

  2. 나는 어떤 것들이 널 (null)을 허용하는지, 그리고 어떤 것들이 나에게 다음 2 일이 걸릴지 연구하고있다.

도움이 되겠습니다.

답변

4

미운 방법 만이 SQLSERVER Management Studio에서 작동 적어도 ...

+0

추가 된 tempdb의를

select 'alter table ' + table_name + ' alter column '+ column_name +' ' + data_type + (case when character_maximum_length is not null and CHARACTER_MAXIMUM_LENGTH <> -1 then ' (' + CAST(CHARACTER_MAXIMUM_LENGTH as varchar) +')' when CHARACTER_MAXIMUM_LENGTH = -1 then '(MAX)' else '' end) + ' null;' from tempdb.information_schema.COLUMNS where TABLE_NAME = '<YOUR TABLE NAME>' and IS_NULLABLE='NO'; 

복사 결과, 붙여 넣기 (아마도 "문자열"로 사용할 수 있습니다) 및 실행합니다. 전에 information_schema 그리고 그것은 내가 예상했던 것과 똑같이 일했다! 대본! – IWriteApps

3

나는 전적으로 당신이 당신의 임시 테이블로 달성 하려는지 수집 아니지만, 지금까지 당신의 첫 번째 질문으로 당신은 변경 후 테이블의 이름에 대한을 sysobjects 테이블을 조회 할 수 있습니다 SYSCOLUMNS 테이블을 통해 반복하여 해당 테이블의 각 열에

그래서 테이블 마스터의 각 열을 반복하고 싶은 말은 할 수 있습니다 :

declare @i int 
declare @colcount int 
declare @column varchar(max) 
declare @sql nvarchar(max) 

set @i = 1 
set @colcount = (select MAX(colID) from syscolumns where ID = (select id from sysobjects   
where name = 'master')) 

WHILE @i < @colcount 
BEGIN 

set @column = (select name from syscolumns where ID = (select id from sysobjects where name = 'master') and colid = @i) 

set @sql = 'select top 1000 [' + @column + '] from master' 

EXECUTE(@sql) 

set @i = @i + 1 

End 

당신이 당신은 그것을 필요 어떤에 @Sql 변경하고 그게

0

나는이 한 번만 실행됩니다 같은데요 ...

select 'alter table xxx alter column ' + columnname + ... 
from information_schema.columns 
where ... 

복사를 얻고 별도의 창 및 실행에 결과를 붙여 넣어야합니다.

관련 문제