2011-07-07 124 views
0

对不起,这篇文章太长了,对于这样一个直截了当的问题。我已经为此工作了近3天,而且这让我完全疯了,所以我尽可能在这里放置尽可能多的细节,以便有人能够让我摆脱这种噩梦!更改SQL Server 2008 R2 Express数据库上的模式

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

我已经登录到SQL Server Management Studio Express 2008 R2作为sa并且还原了这些数据库,所以在那里我现在有两个数据库,一个表的负载被称为例如, database-1.tblTestdatabase-1.tblTest2等;另一个表格称为例如database-2.tblTestdatabase-2.tblTest2因此,所有由database-1架构(表名称前缀为database-1.),并全部由database-2模式在database-2表都“拥有”的database-1表都“拥有”的等(表名称预先计划与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). 

我会希望数据库-2中的表将保持它们的所有者database-2.。如果我像这样映射每个表:

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

导出失败。如果我将映射保留为默认值(database-1.tblTest -> database-1.tblTest),那么它会成功,但是我有database-2中的所有表格,这些表格由database-1模式拥有。

这是现在我在哪里。 Database-1与我恢复它时的相同。但是database-2现在有一组前缀为database-2.的表和一组由database-1.前缀的表。

这是一个问题,因为当我尝试将database-2重新上传回主机服务器时,它的错误是因为架构尝试使用database-1,它位于同一台服务器上,但使用不同的帐户。所以我需要database-2中的表来维护它们的database-2模式所有者,但只需填写来自database-1的数据。

我试图运行这样的查询,试图从database-1database-2改变我的进口表的模式,以database-2

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

然而,这只是错误:

消息15151,级别16,状态1,2号线
无法找到对象数据库1.tableTest',因为它 不存在,或者您没有权限 。

我一直登录到管理工作室,作为sa,因此权限不应该成为问题。

任何人都可以请揭示如何只是得到这个数据为database-2,并保持架构所有者同任何光线?

任何帮助,将大规模感谢,谢谢!

回答

5

您的语法稍微偏离...因为您将模式+表格放在一个方括号中,它假定您有一个表格名称,其中包含句点。试试这个:

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

强烈推荐从数据库,模式,对象和列名破折号避而远之。使用它们会使方括号成为必需,并且会使许多其他不期望它们的工具和脚本复杂化。

+0

谢谢Aaron - 我很想尝试一下。但是,我有点尴尬,因为在数据库-2中,我现在有两组表,所以我真的需要删除所有旧的空的(以'database-2。'为前缀,然后运行这是从database-1导入的脚本,但是这里有大量的表格(比如100多个表格),我似乎无法删除它们,因为它们都有不同的依赖关系。保持试图通过一个将其删除一个,直到他们都走了,或者是有没有更好的办法? – Dan

+0

你可以从目录视图中建立一个脚本(如sys.foreign_keys)先删除所有的依赖。的情况下,听起来像一个。不同的问题,但 –

+0

真棒 - 我只是跑:EXEC sp_MSforeachtable @命令1 =?“DROP TABLE”好几次,它删除了所有它可以在每个时间,直到有没有剩余的表我想你的ALTER架构代码,和它的工作完美的,它看起来像数据库甚至上载了correctl你回到服务器!非常感谢!! – Dan

相关问题