Sql server SSIS传输SQL Server对象表索引的扩展属性出错

Sql server SSIS传输SQL Server对象表索引的扩展属性出错,sql-server,ssis,database-migration,Sql Server,Ssis,Database Migration,我有一个SSIS任务将表从一个DB迁移到另一个DB 源数据库版本:SQL Server 12.0.4422.0 目标数据库版本:SQL Server 14.0.3281.6 SSIS目标版本:SQL Server 2016 配置如下所示:(我也想传输扩展属性) 当IncludeExtendedProperties选项设置为False时,一切正常。但当我将其设置为True时,我得到以下错误: Object is invalid. Extended properties are not permi

我有一个SSIS任务将表从一个DB迁移到另一个DB

源数据库版本:
SQL Server 12.0.4422.0
目标数据库版本:
SQL Server 14.0.3281.6

SSIS目标版本:
SQL Server 2016

配置如下所示:(我也想传输扩展属性)

IncludeExtendedProperties
选项设置为
False
时,一切正常。但当我将其设置为
True
时,我得到以下错误:

Object is invalid. Extended properties are not permitted on 'dbo.TABLE_NAME.INDEX_KEY_NAME', or the object does not exist.
更新:


所以,在彻底调查之后,我发现所有扩展的属性都转移得很好。只有在任何列的索引上存在扩展属性时,才会出现此问题。仍然无法找出那部分…

我终于找到了原因,这可能对其他人有所帮助,因此将此作为答案发布

在MSSQL中,如果不使用名称定义约束(即主键),它将使用生成的名称类型
PK\u COLUMNNAME\u RANDOMNUMBER

现在在SSIS中,如果尝试将具有生成的约束名称的对象传输到新的目标,则执行此操作的查询也会在目标中创建新的生成名称。因此,在传输之后,源数据库和目标数据库之间的约束名称是不同的

此外,尝试将扩展属性从源传输到目标的查询正在尝试为两者使用相同的名称

因此,我测试了以下几种可行的解决方法,以实现这一目标:

  • 所有约束都使用预定义的名称

  • 您根本没有约束的扩展属性

我不确定是否存在任何其他解决方案,也不确定是否在任何更高版本的SSIS中考虑了该解决方案。

您可以启动扩展事件并捕获通过连接发出的DDL,以查看发出了哪些命令,以试图识别出什么是错误的。我有一篇关于使用它的帖子,这可能是一个有用的起点。这就是说,我的猜测是,如果扩展属性在传输中不起作用(并且它与权限无关),这是任务的缺陷,最终用户可能无法修复。@billinkc会看一看,谢谢。任务本身看起来很好,因为我正在成功地将其用于其他数据库。问题似乎与源SQL Server版本或某些DB配置(即用户)有关