我有一个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子句不会被执行。
任何提示?
谢谢,
答案 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
拉吉