更改SQL Server 2008 R2 Express数据库上的架构

Dan*_*Dan 0 schema alter sql-server-2008

对不起,这篇文章很长,对于这样一个直截了当的问题.我已经在这里工作了将近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中快车2008 R2作为sa和恢复这些数据库,所以在那里我现在有两个数据库,一个包含表称为例如负载database-1.tblTest,database-1.tblTest2等等; 另用一台名为例如负载database-2.tblTest,database-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).  
Run Code Online (Sandbox Code Playgroud)

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

database-1.tblTest (on 'source' database-1) -> database-2.tblTest (on 'destination' database-2). 
Run Code Online (Sandbox Code Playgroud)

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

database-1.tblTest -> database-2.tblTest
Run Code Online (Sandbox Code Playgroud)

导出失败.如果我将映射保持为default(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-2database-1database-2:

USE [database-2]
ALTER SCHEMA [database-2] TRANSFER [database-1.tblTest]
Run Code Online (Sandbox Code Playgroud)

但是,这只是错误:

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

sa整个登录管理工作室,因此权限不应成为问题.

任何人都可以了解如何获取这些数据database-2并使架构所有者保持不变?

任何帮助都会受到大力赞赏,谢谢!

Aar*_*and 5

你的语法有点偏离......因为你将schema + table括在一个方括号中,它假设你有一个带有句点破折号的表名.试试这个:

ALTER SCHEMA [database-2] TRANSFER [database-1].[tblTest];
Run Code Online (Sandbox Code Playgroud)

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