我进口了一堆表从旧的SQL Server(2000年)到2008年我的数据库。 所有导入的表的前缀为我的用户名,例如: jonathan.MovieData
。 在该表中properties
它列出了jonathan
为DB模式。 当我写存储过程,我现在必须包括jonathan.
在所有的表名的前面这是令人困惑的。
我如何改变我的所有表被DBO代替乔纳森?
目前的结果: jonathan.MovieData
期望的结果: dbo.MovieData
我进口了一堆表从旧的SQL Server(2000年)到2008年我的数据库。 所有导入的表的前缀为我的用户名,例如: jonathan.MovieData
。 在该表中properties
它列出了jonathan
为DB模式。 当我写存储过程,我现在必须包括jonathan.
在所有的表名的前面这是令人困惑的。
我如何改变我的所有表被DBO代替乔纳森?
目前的结果: jonathan.MovieData
期望的结果: dbo.MovieData
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;
见ALTER SCHEMA 。
广义语法:
ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName;
您可以运行以下,这将产生一组ALTER模式语句为所有talbes的:
SELECT 'ALTER SCHEMA dbo TRANSFER ' + TABLE_SCHEMA + '.' + TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'jonathan'
然后,您可以复制和查询分析器中运行的语句。
下面是一个较旧的脚本,为你做的,我也想通过更改对象所有者。 还没有尝试过在2008年,虽然。
DECLARE @old sysname, @new sysname, @sql varchar(1000)
SELECT
@old = 'jonathan'
, @new = 'dbo'
, @sql = '
IF EXISTS (SELECT NULL FROM INFORMATION_SCHEMA.TABLES
WHERE
QUOTENAME(TABLE_SCHEMA)+''.''+QUOTENAME(TABLE_NAME) = ''?''
AND TABLE_SCHEMA = ''' + @old + '''
)
EXECUTE sp_changeobjectowner ''?'', ''' + @new + ''''
EXECUTE sp_MSforeachtable @sql
来自明白了这个网站 。
它还谈到做同样的存储的特效,如果你需要。
USE MyDB;
GO
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;
GO
参考: ALTER SCHEMA
将表从dbo架构到MYSCHEMA:
ALTER SCHEMA MySchema TRANSFER dbo.MyTable
从MYSCHEMA移至表dbo架构:
ALTER SCHEMA dbo TRANSFER MySchema.MyTable
我刚刚发布了这一个类似的问题: 在SQL Server 2005,我该如何改变表的“模式”不会丢失任何数据?
略有改善,以赛义德的出色答卷......
我加了一个exec有这个代码的自我执行,我在顶部增加了一个联盟,这样我可以改变这两个表和存储过程的架构:
DECLARE cursore CURSOR FOR
select specific_schema as 'schema', specific_name AS 'name'
FROM INFORMATION_SCHEMA.routines
WHERE specific_schema <> 'dbo'
UNION ALL
SELECT TABLE_SCHEMA AS 'schema', TABLE_NAME AS 'name'
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA <> 'dbo'
DECLARE @schema sysname,
@tab sysname,
@sql varchar(500)
OPEN cursore
FETCH NEXT FROM cursore INTO @schema, @tab
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'ALTER SCHEMA dbo TRANSFER [' + @schema + '].[' + @tab +']'
PRINT @sql
exec (@sql)
FETCH NEXT FROM cursore INTO @schema, @tab
END
CLOSE cursore
DEALLOCATE cursore
我也曾经有过恢复DBDUMP,发现该模式是不是DBO - 我花了几个小时试图获得SQL Server Management Studio或Visual Studio中的数据传输来改变目标架构......最终我只是运行这个反对恢复倾倒在新服务器上得到的东西我想要的方式。
您可以将多个数据库对象的批量修改架构在这篇文章中描述:
如何更改的所有表,视图模式和MSSQL存储过程
办法做到这一点对个人的事情:
改变模式DBO转移jonathan.MovieData
我也有类似的问题,但我的架构在它有一个反斜杠。 在这种情况下,包括架构周围的括号。
ALTER SCHEMA dbo TRANSFER [DOMAIN\jonathan].MovieData;
MS-帮助://MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/0a760138-460e-410a-a3c1-d60af03bf2ed.htm
ALTER SCHEMA模式名TRANSFER securable_name
打开SQL Server为SA帐户,然后点击新的查询过去的一击查询
比点击执行,会回滚所有拥有的模式回到SA帐户
alter authorization on schema::[db_datareader] to [dbo]
alter authorization on schema::[db_datareader] to [db_datareader]
alter authorization on schema::[db_datawriter] to [dbo]
alter authorization on schema::[db_datawriter] to [db_datawriter]
alter authorization on schema::[db_securityadmin] to [dbo]
alter authorization on schema::[db_securityadmin] to [db_securityadmin]
alter authorization on schema::[db_accessadmin] to [dbo]
alter authorization on schema::[db_accessadmin] to [db_accessadmin]
alter authorization on schema::[db_backupoperator] to [dbo]
alter authorization on schema::[db_backupoperator] to [db_backupoperator]
alter authorization on schema::[db_ddladmin] to [dbo]
alter authorization on schema::[db_ddladmin] to [db_ddladmin]
alter authorization on schema::[db_owner] to [dbo]
alter authorization on schema::[db_owner] to [db_owner]