【问题标题】:Import / Export Data Problem with Sql Server Management StudioSql Server Management Studio 的导入/导出数据问题
【发布时间】:2011-06-11 01:37:16
【问题描述】:

我对 Microsoft 的所有事物都是新手...我一直在努力研究如何使用 SQL Server Management Studio 2008 导出数据库并将其导入另一个数据库服务器。我是 LAMP 开发人员,所以如果这是一个 mysql 数据库,我会在 shell 终端中输入以下内容:

mysqldump -u src_dbuser -psrc_password -h src_dbserver src_dbname > export.sql
mysql -u dest_dbuser -pdest_password -h dest_dbserver dest_dbname < export.sql

如何在 SQL Server 中执行等效任务?我尝试了很多事情,但都失败了。我的团队在 SQL Server Management Studio 中尝试的示例:

1) 我的客户端右键单击数据库,选择“任务”,选择“生成脚本...”,然后按照后续弹出窗口中概述的步骤进行操作。在这样做的过程中,我们得到了一个 db-schema 和所有存储过程的 sql 文件,但它丢失了所有数据。我们没有看到导出数据的选项。

2) 所以我的客户决定将数据导出为 excel 文件。当我尝试导入 excel 文件时,其中一个实体记录违反了 db 约束。 excel 文件有一个“空单元格”,用于映射到相应数据库表中不可为空的列的字段。这一条记录停止并退出剩余的导入过程。我不知道如何告诉 Sql Server Management Studio 忽略这条记录并继续导入其余数据。

3) 然后我尝试自己在家远程进行导出,以查看我的客户是否遗漏了什么。在重现步骤 2) 中概述的步骤时,导出时出现新错误

Microsoft.SqlServer.Management.Smo.SmoException: Could not read metadata, possibly due to insufficient access rights. at Microsoft.SqlServer.Management.SqlScriptPublish.GeneratePublishPage.worker_DoWork(Object sender, DoWorkEventArgs e) at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e) at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)

我认为我拥有所有访问权限,因为我可以成功执行执行 CRUD 操作的查询。不知道如何确认我是否拥有访问权限。

我在这件事上浪费了这么多时间...我很沮丧...微软是否试图让事情变得异常困难?有人可以告诉我如何成功导入/导出数据库,以便我可以重新做我喜欢做的事情吗??? IE。发展!!!

其他信息

好的,我尝试了一些人建议的备份方法。这不起作用,因为 SSMS 正在数据库服务器上创建备份文件,而不是我正在使用的计算机的 HD。我无权访问数据库服务器上的文件系统,这就是为什么 SSMS 一直抱怨它没有写入任何目录的权限。

【问题讨论】:

  • 您是否尝试过进行备份和恢复?

标签: sql-server


【解决方案1】:

对数据库进行完整备份。您可以从 SQL Server Management Studio 执行此操作(右键单击数据库,选择“任务”并选择“备份”。然后填写空白。或者您可以通过 SQL 查询执行此操作,如下所示:

backup database sandbox
to disk='C:\sql-backup\sandbox.bak'
with name='sandbox-Full Database Backup' ,
     noformat ,
     init     ,
     skip     ,
     norewind ,
     nounload ,
     stats=10

将其复制到目标 SQL 服务器 -- FTP,将其刻录到 CD 等。不过,可能需要先对其进行压缩,具体取决于文件的大小。

在目标服务器上打开 SQL Server 管理工作室。在对象资源管理器中,右键单击数据库选项卡,选择“还原数据库...”,您将看到一个 2 面板对话框。在“常规”下,您需要

  • 在“常规”窗格中:
    • 为新数据库提供一个名称
    • 选择要从中恢复的“设备”(文件名)
    • 选择要恢复的备份集(文件内容)
  • 在“选项”窗格中:
    • 如果使用该名称的数据库已经存在,您需要选中“覆盖现有数据库”选项。
    • 您可能希望覆盖默认数据/日志文件位置(但默认值通常可行)。
    • 确保将恢复状态设置为“让数据库可供使用”(除非您有其他理由。

然后点击确定。

您还需要确保 2 个 SQL Server 实例上的默认排序顺序相同。否则你几乎肯定会遇到问题。

【讨论】:

  • ok...我尝试了您在 ssms 中发布的脚本,这是错误消息:Msg 3201, Level 16, State 1, Line 1 Cannot open backup device 'C:\Users\john' .操作系统错误 5(拒绝访问。)。 Msg 3013, Level 16, State 1, Line 1 BACKUP DATABASE 异常终止..
  • Windows 中“sudo chmod 777 C:\Users\john”的等价物是什么?男人……好难……
  • windows 中的安全性...不同于 *nix B^) 您可能希望备份到默认的 SQL Server 备份位置,然后从那里复制它。不过很大程度上取决于盒子已经配置好了。
  • 通过界面来做通常更容易。我会尝试尼古拉斯提到的第一种方式。 Windows 是您的朋友,不要害怕使用 GUI。
  • 好的,我尝试通过 GUI 进行操作。我看到备份目标是 C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\db1511.bak。我按了确定,然后弹出一个提示成功备份。但是当我转到目录时,那里没有备份文件。该目录中也没有隐藏文件...我做错了吗?
【解决方案2】:

我最终用蛮力做事。我将 Excel 文件导出为 csv 文件,每个工作表对应一个 csv 文件,代表一个 db 表。然后我手动编辑了 csv 文件...我将每个行项目转换为插入查询语句。我将插入查询复制并发布到 sql server management studio,并根据需要调试每个插入语句。

很生气

【讨论】:

    【解决方案3】:

    How to get script of SQL Server data?

    该链接向您展示了如何将数据导出为一系列 sql 插入语句。然后,您可以在新的 dbase 上执行这些语句。

    【讨论】:

      猜你喜欢
      • 2010-11-10
      • 2011-11-18
      • 2012-07-06
      • 2019-04-05
      • 1970-01-01
      • 2011-04-10
      • 2011-09-22
      • 2014-04-24
      • 2023-04-10
      相关资源
      最近更新 更多