【问题标题】:Import DATA from an SQL server database with identities column从带有标识列的 SQL Server 数据库中导入 DATA
【发布时间】:2021-03-02 09:06:46
【问题描述】:

我想使用 SQL Server Manager Studio 将数据库中的所有数据导出到新数据库。

我使用了导入和导出助手(任务 -> 导出数据),但导入后我尝试保存新数据

我在尝试插入数据时由于标识列错误而出现插入错误:

com.microsoft.sqlserver.jdbc.SQLServerException:无法在“id”列中插入空值

虽然我指定在导出之前保留身份插入。

我想将数据导出到具有所有身份列约束的新数据库中。

【问题讨论】:

  • 错误信息不是告诉你SET IDENTITY_INSERT ON吗? 实际错误是什么?它是否抱怨重复键值?
  • 错误信息说:com.microsoft.sqlserver.jdbc.SQLServerException: Unable to insert null value in column 'id'
  • 那就更清楚了。您正在尝试将 NULL 插入到不接受 NULL 的字段中。这与 IDENTITY 值完全无关。也许 CSV 有脏数据。可能目标表中的某些字段不可为空
  • 我从 springboot 应用程序中得到错误。该字段应该接受 NULL,因为它是带有 @GeneratedValue(strategy = GenerationType.IDENTITY) 的 ID。导出时错误来自数据库,它不导出标识列约束。
  • 错误清楚地表明该字段不接受 NULL。这不受客户端应用程序的影响,也不受 IDENTITY 的使用影响。该字段声明为NOT NULLIDENTITY 不是约束,它是一种生成值的方法

标签: sql-server database ssms


【解决方案1】:

如果您想从数据库中完全移动所有数据。任务->导出是一个选项(因为您面临的问题尚不清楚)您可以尝试其他选项进行备份(.bak 文件)并将其还原到新数据库。

【讨论】:

    【解决方案2】:

    感谢您的帮助,问题不是很清楚。

    我实际上需要将 azure 数据库导出到 SQL server 数据库。

    我使用了另一个导出过程:microsoft.github.io/AzureTipsAndTricks/blog/tip140.html,现在导出的本地数据库正在运行

    【讨论】:

    • 这不是数据导出过程。这会将整个数据库提取为脚本,并修改目标数据库以匹配源。你问的不是这个。它还验证源表和目标表是否不同。在这种情况下,备份是一种更简单的解决方案
    猜你喜欢
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2011-01-12
    相关资源
    最近更新 更多