首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL执行任务部分工作

SQL执行任务部分工作
EN

Stack Overflow用户
提问于 2020-10-20 22:04:52
回答 3查看 38关注 0票数 1

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

SQL脚本:

代码语言:javascript
复制
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 
EN

回答 3

Stack Overflow用户

发布于 2020-10-21 15:30:53

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

先说几句话:

  • 在创建表时有一个主要步骤
  • 您使用的是两个不同的模式dbo &

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

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2020-10-22 01:57:44

感谢所有帮助我解决这个问题的人。然而,这是我的一个重大疏忽!我无法将OLE DB目标的"ValidateExternalMetadata“设置为"False”。程序包试图定位该表,但在到达我的SQL脚本以创建表之前,如果该表不存在,则会失败。

票数 0
EN

Stack Overflow用户

发布于 2020-10-21 08:44:32

将truncate改为drop

如果object_id('RAW.TABLE_NAME')不为空

代码语言:javascript
复制
TRUNCATE TABLE [RAW].[TABLE_NAME];   -->> DROP TABLE [RAW].[TABLE_NAME]; 
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64446857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档