使用 "Generate Scripts..." 迁移数据时 nvarchar 和 datetime 之间的类型转换

Type conversion between nvarchar and datetime when migrating data with "Generate Scripts..."

我正在使用 Tasks>>Generate scripts... 并在高级选项中选择 Data only 将数据从 SQLServer2012 数据库复制到 SQLServer2014 数据库。

当我尝试在SQLServer2014 数据库中执行生成的脚本时出现问题。错误是:

The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range

我知道这可能是因为数据库具有不同的文化以及第一台服务器生成的插入内容:

INSERT [dbo].[CollectionSet] ([Id], [CreationDate], [Active], [MenuOrder]) VALUES (1, CAST(N'2015-09-18 00:00:00.000' AS DateTime), 1, 1)

不在第二个服务器上工作。

所以,我的问题是:如何生成具有正确日期格式的脚本,以便它可以在第二台服务器上运行?

PD:我无法访问目标服务器上的 Management Studio。

如果我没记错的话 (fixme?) 生成脚本 SSMS 功能将不允许进行任何转换,并且它假定您要执行输出的目标具有相同(或至少兼容)的配置(整理,table 结构等)。

这里有一些 solutions/workarounds (braindump):

ETL工具(以SSIS为例)

最好的办法是使用 SSIS 等 ETL 工具(SQL Server Standard 及更高版本附带)跨服务器提取-转换-加载数据。

您可以使用导入/导出向导(在数据库上下文菜单中的 Tasks 下)生成 SSIS 包。

使用备份

您始终可以在源服务器上创建数据库备份,然后在目标服务器上恢复它。要将数据迁移到新数据库,您可以使用常规 SQL 查询。

解决方法

  • 创建有问题的视图 table 并转换视图中有问题的列,然后导出视图。
  • 在目标服务器上构建一个视图(使用转换),插入到该视图中。

在我看来,最灵活的解决方案是使用 ETL 工具,如 SSIS,创建包并执行它们。

作为最后的想法:很可能你不花一些时间就无法解决这个问题(比如为每个有问题的 table 或 build/edit SSIS 包手动编写查询) .