0

抱歉,这篇文章太长了,对于这样一个直截了当的问题。我已经为此工作了将近 3 天,这让我完全发疯了,所以我试图在这里尽可能多地提供细节,以便有人能够让我摆脱这个噩梦!

我基本上有两个来自共享主机的 SQL Server 2008 R2 数据库备份文件:database-1.bakdatabase-2.bak. 这些数据库中的每一个都设置在同一共享服务器上的不同共享主机帐户上,每个用户都有一个数据库用户(相应地命名为“database-1”和“database-2”)。数据库的结构是相同的,但数据不同。Database-1有内容,database-2是空的。我想复制所有数据database-1database-2然后重新上传database-2回共享主机。这两个数据库应该完全相同,但database-1应该由模式database-1和模式拥有。database-2database-2

我已经登录到 SQL Server Management Studio Express 2008 R2sa并恢复了这些数据库,所以我现在有两个数据库,一个有一个名为 eg 等的表的database-1.tblTest负载database-1.tblTest2;另一个有大量表,例如database-2.tblTestdatabase-2.tblTest2等等。因此,所有表database-1都由database-1模式“拥有”(表名前面带有database-1.),并且所有表database-2都由database-2模式“拥有”(表名称以database-2.) 开头。

我试过右键单击database-1并选择Tasks > Export Data并将其导出到database-2. 奇怪的是,当它自动映射要导出的对象时,它会这样做:

database-1.tblTest (on 'source' database-1) -> database-1.tblTest (on 'destination' database-2).  

这很奇怪,因为我希望它会这样做:

database-1.tblTest (on 'source' database-1) -> database-2.tblTest (on 'destination' database-2). 

我希望 database-2 中的表能够保留它们的database-2.所有者。如果我像这样映射每个表:

database-1.tblTest -> database-2.tblTest

导出失败。如果我将映射保留为默认 ( database-1.tblTest -> database-1.tblTest) 它会成功,但是我会拥有一整套database-2database-1架构拥有的表。

这就是我现在所处的位置。Database-1和我恢复的时候一样。但是database-2现在有一组以 . 开头的表database-2.和同一组以database-1..

这是一个问题,因为当我尝试重新上传database-2回主机服务器时,它会出错,因为架构正在尝试使用database-1位于同一服务器但不同帐户的架构。所以我需要这些表database-2来维护它们的database-2架构所有者,但只需填充来自database-1.

我尝试运行这样的查询来尝试将导入表上的架构database-2从更改database-1database-2

USE [database-2]
ALTER SCHEMA [database-2] TRANSFER [database-1.tblTest]

但是,这只是错误:

消息 15151,级别 16,状态 1,第 2 行
找不到对象“database-1.tableTest”,因为它不存在或您没有权限。

我一直登录到管理工作室sa,所以权限应该不是问题。

任何人都可以阐明如何将这些数据输入database-2并保持模式所有者相同吗?

任何帮助将不胜感激,谢谢!

4

1 回答 1

5

您的语法有点偏离...因为您将架构 + 表括在一个方括号中,它假定您有一个带有句点破折号的表名。试试这个:

ALTER SCHEMA [database-2] TRANSFER [database-1].[tblTest];

强烈建议远离数据库、模式、对象和列名中的破折号。使用它们会使方括号变得必要,并且会使许多其他不期望它们的工具和脚本变得复杂。

于 2011-07-07T13:04:26.417 回答