表删除并在SSIS包中重新创建

时间:2013-05-14 10:56:18

标签: sql-server sql-server-2008 ssis

我有一个SSIS,为了工作必须有一些特定的表。因此,我创建了一个“执行Sql任务”包,它首先验证表是否存在并具有特定的列数,如果没有,则删除现有表,然后使用所需的列重新创建。  底线是我的sql脚本看起来像这样(在相同的“执行sql任务”包中):

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变量的值为1,而不是0,因此不会创建具有所需结构的表,因为if子句不会被执行。

任何提示?

谢谢,

1 个答案:

答案 0 :(得分: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

拉​​吉