2013-05-14 3 views
2

작업하기 위해 특정 테이블이 있어야하는 SSIS가 있습니다. 따라서 "SQL 실행 태스크"패키지를 만들었습니다.이 패키지는 테이블이 존재하는지 여부를 먼저 확인하고 특정 수의 열을 가지고 있습니다. 그렇지 않으면 기존 테이블을 삭제 한 다음 필요한 열로 다시 만듭니다. 결론 내 SQL 스크립트 (같은 "SQL 작업을 실행"패키지)이 보이는 것입니다 :SSIS 패키지에서 테이블 삭제 및 다시 작성

declare @nr integer; 
set @nr=(select COUNT (*) 
     from dbo.syscolumns 
     where id= (select id 
        from dbo.sysobjects 
        where id = object_id(N'[bogdan].[dbo].[my_table]') 
        and OBJECTPROPERTY(id, N'IsUserTable') = 1)); 

if (@nr<>10 and @nr<>0) /*to verify if my_table exists and has the required number of  colums - 10 */ 
    drop table [bogdan].[dbo].[my_table] 
go 

declare @nr1 integer; 
set @nr1=(select count(*) 
      from dbo.sysobjects 
      where id = object_id(N'[bogdan].[dbo].[My_table]') 
      and OBJECTPROPERTY(id, N'IsUserTable') = 1); 
if @nr1=0 
create table bogdan.dbo.my_table (....) on [PRIMARY] 
go 

/*end of script*/ 

문제는 그 내가 거기,을 (위의 예에서 MY_TABLE) 테이블을 떨어 뜨린 경우에도 sysobjects에서 여전히 "my_table"이라는 객체입니다. @ nr1 변수는 0 대신 값 1을 가지므로 if 절이 실행되지 않으므로 필요한 구조의 테이블이 만들어지지 않습니다.

힌트가 있습니까?

감사합니다,

+0

당신은 확실히 테이블이 삭제되고 있습니까? '@nr = 10'이면? @nr이 0이 아니고 @nr이 10이 아닌 경우에만 드롭합니다. –

+0

예, 확실합니다. 나는 Sql Server로부터 자신을 포기했다. @ nr = 10 인 경우 존재하고 오른쪽 열이 있기 때문에 아무 것도하지 않아야합니다. – BogdanM

+0

@BogdanM : 귀하의 질의가 완벽합니다. 그것은 작동해야합니다. 가능하면 원래 검색어를 게시하십시오. 그것은 우리가이 문제를 발견하는 데 도움이 될 것입니다. – Maximus

답변

1

이 시도하고 테이블이 실제로 떨어중인 경우에는 확실히 알 수 :

declare @nr integer; 
set @nr=(select COUNT (*) 
     from dbo.syscolumns 
     where id= (select id 
        from dbo.sysobjects 
        where id = object_id(N'[bogdan].[dbo].[my_table]') 
        and OBJECTPROPERTY(id, N'IsUserTable') = 1)); 

if (@nr<>10 and @nr<>0) 
/*to verify if my_table exists and has the required number of  colums - 10 */ 
    begin 
    drop table [bogdan].[dbo].[my_table] 
    set @nr=0 
    end 

if @nr=0 
create table bogdan.dbo.my_table (....) on [PRIMARY] 
go 

주권

관련 문제