我的SSIS模板中有一个SQL Execute Task,它将根据表是否存在而截断或创建,但我遇到的问题是,如果脚本按顺序运行,并且控制流中的所有其他任务都不存在,则它不会创建表。如果我停止包,并执行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 发布于 2020-10-21 15:30:53
此答案旨在解决会话冲突。与其说它是一个解决方案,不如说它是一个建议。
先说几句话:
关于我在评论中提到的关于动态代码的内容:
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发布于 2020-10-22 01:57:44
感谢所有帮助我解决这个问题的人。然而,这是我的一个重大疏忽!我无法将OLE DB目标的"ValidateExternalMetadata“设置为"False”。程序包试图定位该表,但在到达我的SQL脚本以创建表之前,如果该表不存在,则会失败。
发布于 2020-10-21 08:44:32
将truncate改为drop
如果object_id('RAW.TABLE_NAME')不为空
TRUNCATE TABLE [RAW].[TABLE_NAME]; -->> DROP TABLE [RAW].[TABLE_NAME]; https://stackoverflow.com/questions/64446857
复制相似问题