SQL执行任务部分工作



我的SSIS模板中有一个SQL执行任务,它将根据表是否存在而TRUNCATE或CREATE,但我遇到的问题是,如果脚本与控制流中的所有其他任务一起按顺序运行,则如果表不存在,它将不会创建表。如果我停止包,并自己执行SQL脚本,它就可以正常工作。任何建议都将不胜感激。

SQL脚本:

IF object_id('[RAW].[TABLE_NAME]') is not null
TRUNCATE TABLE [RAW].[TABLE_NAME]; 
ELSE
BEGIN
CREATE TABLE RAW.TABLE_NAME
(
[Sys_ID] BIGINT NOT NULL,
[Report_Date] DATE,
[Ingestion_Date] DATE
PRIMARY KEY CLUSTERED 
(
[Sys_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [RAW].[TABLE_NAME] ADD  DEFAULT (NEXT VALUE FOR [dbo].[TABLE_SEQUENCE]) FOR [Sys_ID]    
END 

此答案旨在解决会话冲突。与其说是解决方案,不如说是一个建议。。

首先有几句话:

  • 在创建表时有〔Primary〕
  • 您正在使用两种不同的模式dbo&未加工的

关于我在关于动态代码的评论中提到的内容:

DECLARE @SQL NVARCHAR(MAX)

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[RAW].[TABLE_NAME]') AND type in (N'U'))
BEGIN
SET @SQL = 'TRUNCATE TABLE [RAW].[TABLE_NAME]'
EXEC (@SQL)
END
ELSE
BEGIN
SET @SQL = ' CREATE TABLE RAW.TABLE_NAME
(
[Sys_ID] BIGINT NOT NULL,
[Report_Date] DATE,
[Ingestion_Date] DATE
PRIMARY KEY CLUSTERED 
(
[Sys_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]'
EXEC (@SQL)
SET @SQL = 'ALTER TABLE [RAW].[TABLE_NAME] ADD  DEFAULT (NEXT VALUE FOR [dbo].[TABLE_SEQUENCE]) FOR [Sys_ID]'
EXEC(@SQL)
END

感谢所有帮助我解决此问题的人。然而,这是我的一个重大疏忽!我未能设置";ValidateExternalMetadata";对于我的OLE DB目的地;错误";。程序包试图定位该表,但在到达我的SQL脚本以创建该表之前,由于该表不存在而失败。

更改truncate以删除

IF object_id('[RAW].[TABLE_NAME]'(不是空

TRUNCATE TABLE [RAW].[TABLE_NAME];   -->> DROP TABLE [RAW].[TABLE_NAME]; 

相关内容

最新更新