AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 216263
Accepted
Antoine Hernandez
Antoine Hernandez
Asked: 2018-08-30 16:34:03 +0800 CST2018-08-30 16:34:03 +0800 CST 2018-08-30 16:34:03 +0800 CST

将 SSIS 包升级到 2017

  • 772

这个问题的目的是记录我对在 2012 年之前使用脚本任务的一些旧版本的 SSIS 中创建的 SSIS 包的目标 SQL Server 版本时似乎是一个奇怪问题的回答。

多年来,通过各种版本的 BIDS/SSDT 升级时,最初在 BIDS 2005 或 2008 中创建的 SSIS 包没有任何问题。即使现在包升级到 SSDT 并以 SQL Server 2016 为目标,除了能够利用最新的 SSIS 功能(包部件、项目参数等)和通过 SSDT 部署包之外,一切仍然像往常一样工作/Visual Studio 到同一目标 SQL Server。安装了 SSIS 并升级到 2016 或 2017 的 SQL Server 似乎与 MSDB 或包存储中的包没有问题,因为升级后作业继续按预期运行。

因此,作为正常升级例程的一部分,决定打开一个 SSIS 包并像以前一样使用以前的 SSDT 更改对其进行升级。在以前的 SSDT 更改中,一个版本适用于特定版本的 SSIS。一旦他们引入了针对某些以前版本的 SSIS 的功能,该功能似乎可以按预期工作。我认为最新的 SSIS 和 SSDT 版本会是一样的。

但是,一旦在 SSDT 中将目标版本更改为 SQL Server 2017,就会出现一些 SSDT 未捕获/修复或由于某种原因无法处理的问题。我遇到的一些问题是:

  1. 无法更改目标 .Net Framework 版本,因为它始终恢复为脚本任务属性中的原始设置
  2. 会出现错误,例如“'Dts' 不是 'Microsoft.SQLServer' 的成员”、“未定义类型 'Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase'”、“无法迁移包含在包为 VSTA 14.0 格式。将脚本移动到新的脚本任务。”,并且“未定义类型'Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute'。”
  3. 构建脚本任务将失败,错误之一是“主要参考”Microsoft.SqlServer.ScriptTask,Version=14.0.0.0,Culture=Neutral,PublicKeyToken=89845dcd8080cc91“无法解决,因为它是针对”构建的。 NETFramework,Version=v4.5” 框架。这是比当前目标框架“.NETFramework,Version=v4.0”更高的版本,我会看到的另一个错误是“在 Imports 'Microsoft.SqlServer 中指定的命名空间或类型.Dts.Runtime' 不包含任何公共成员或找不到。确保命名空间或类型已定义并包含至少一个公共成员。确保导入的元素名称不使用任何别名。”

好消息是将目标更改回 SQL Server 2016 似乎可以正常工作,我可以像以前一样继续编辑包而不会出现错误,并且构建将按预期工作,但坏消息是将 2016 包部署到 2017 SSIS 服务器没有得到转换就像在 SQL Server 升级期间所做的那样。那么,我如何能够更新包以针对 SQL Server 2017 并且不存在阻止这种情况的这些问题呢?

sql-server ssis
  • 1 1 个回答
  • 7157 Views

1 个回答

  • Voted
  1. Best Answer
    Antoine Hernandez
    2018-08-30T16:34:03+08:002018-08-30T16:34:03+08:00

    问题的主要来源是在 2016 年和之前处理的 SSIS 模式中更改的标签没有问题。我必须查看 SSIS 包的代码来检查差异,而 SSIS 2017 似乎对脚本任务的 Project 标记的 PropertyGroup 节点内的架构更加严格。

    这是一个有错误的标签:

    <PropertyGroup>
      <ProjectTypeGuids>{30D016F9-3734-4E33-A861-5E7D899E18F3};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
      <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
      <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
      <OutputType>Library</OutputType>
      <RootNamespace>ST_f5177258030742e5ba64fefba1f795ea.vbproj</RootNamespace>
      <AssemblyName>ST_f5177258030742e5ba64fefba1f795ea.vbproj</AssemblyName>
      <StartupObject></StartupObject>
      <OptionExplicit>On</OptionExplicit>
      <OptionCompare>Binary</OptionCompare>
      <OptionStrict>Off</OptionStrict>
      <OptionInfer>On</OptionInfer>
      <ProjectGuid>{D93B5E70-A7E9-4AA1-94E7-7859FE6B3672}</ProjectGuid>
    </PropertyGroup>
    

    似乎解决了我一半问题的修复是添加缺少的条目,以便上面现在看起来像下面的代码新条目(在 after</ProjectGuid>和 before </PropertyGroup>)是:

    1. 产品版本
    2. 架构版本
    3. AppDesigner文件夹
    4. 目标框架版本
    5. 文件对齐
    6. 解决AssemblyReferenceIgnoreTargetFrameworkAttributeVersionMismatch
    7. TargetFrameworkProfile

    这是添加更改后的样子:

    <PropertyGroup>
      <ProjectTypeGuids>{30D016F9-3734-4E33-A861-5E7D899E18F3};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
      <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
      <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
      <OutputType>Library</OutputType>
      <RootNamespace>ST_f5177258030742e5ba64fefba1f795ea.vbproj</RootNamespace>
      <AssemblyName>ST_f5177258030742e5ba64fefba1f795ea.vbproj</AssemblyName>
      <StartupObject></StartupObject>
      <OptionExplicit>On</OptionExplicit>
      <OptionCompare>Binary</OptionCompare>
      <OptionStrict>Off</OptionStrict>
      <OptionInfer>On</OptionInfer>
      <ProjectGuid>{D93B5E70-A7E9-4AA1-94E7-7859FE6B3672}</ProjectGuid>
      <ProductVersion>8.0.30703</ProductVersion>
      <SchemaVersion>2.0</SchemaVersion>
      <AppDesignerFolder>My Project</AppDesignerFolder>
      <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
      <FileAlignment>512</FileAlignment>
      <ResolveAssemblyReferenceIgnoreTargetFrameworkAttributeVersionMismatch>true</ResolveAssemblyReferenceIgnoreTargetFrameworkAttributeVersionMismatch>
      <TargetFrameworkProfile></TargetFrameworkProfile>
    </PropertyGroup>
    

    这样做并没有解决无法更改 .Net Framework 目标的问题,因此必须有其他内容,所以我查看了代码并发现了问题。在代码中我发现以下内容</ProjectExtensions>:

    <PropertyGroup>
      <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    </PropertyGroup>
    <PropertyGroup>
      <TargetFrameworkProfile></TargetFrameworkProfile>
    </PropertyGroup>
    

    由于这些现在位于脚本任务的主 PropertyGroup 中,因此它们被认为是多余的,因此在旧位置不再需要它们。删除这些条目解决了问题的另一半。这样做之后,我不仅能够将 SQL Server 目标更改为 2017,而且还能够更改 .Net Framework 版本并且它不会恢复。此外,构建能够再次成功构建。

    以这种方式解决问题比尝试打开每个包并手动创建新的脚本任务、将逻辑从旧的复制到新的、确保变量和引用相同以及删除旧任务更容易。其他事情。这个过程需要很长时间,特别是如果有很多包要通过。

    如果您遇到此问题,希望您会发现这很有用。

    • 4

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve