jon*_*all 113 sql database sql-server schema sql-server-2008
我从旧的SQL Server(2000)导入了一堆表到我的2008数据库.所有导入的表都以我的用户名为前缀,例如:jonathan.MovieData.在表中,properties它jonathan列为db模式.当我编写存储过程时,我现在必须包含jonathan.在所有表名称之前,这是令人困惑的.
如何将所有表格更改为dbo而不是jonathan?
目前的结果: jonathan.MovieData
期望的结果: dbo.MovieData
Rem*_*anu 173
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;
Run Code Online (Sandbox Code Playgroud)
广义语法:
ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName;
Run Code Online (Sandbox Code Playgroud)
pat*_*ech 38
您可以运行以下命令,它将为您的所有talbes生成一组ALTER sCHEMA语句:
SELECT 'ALTER SCHEMA dbo TRANSFER ' + TABLE_SCHEMA + '.' + TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'jonathan'
Run Code Online (Sandbox Code Playgroud)
然后,您必须在查询分析器中复制并运行语句.
这是一个较旧的脚本,也会为你做这件事,我认为通过更改对象所有者.但是,在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
Run Code Online (Sandbox Code Playgroud)
从这个网站得到它.
如果需要,它还讨论了为存储过程做同样的事情.
Mit*_*eat 20
USE MyDB;
GO
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;
GO
Run Code Online (Sandbox Code Playgroud)
参考:ALTER SCHEMA
Ner*_*u-J 13
将表从dbo架构移动到MySchema:
ALTER SCHEMA MySchema TRANSFER dbo.MyTable
Run Code Online (Sandbox Code Playgroud)
将表从MySchema移动到dbo架构:
ALTER SCHEMA dbo TRANSFER MySchema.MyTable
Run Code Online (Sandbox Code Playgroud)
我刚刚发布了一个类似的问题:在sql server 2005中,如何在不丢失任何数据的情况下更改表的"模式"?
一个微小的改进赛义德的出色答卷......
我添加了一个exec来让这个代码自行执行,我在顶部添加了一个union,这样我就可以更改表和存储过程的模式:
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
Run Code Online (Sandbox Code Playgroud)
我也不得不恢复dbdump,并发现架构不是dbo - 我花了好几个小时试图让Sql Server管理工作室或visual studio数据传输来改变目标架构......我最后只是针对恢复运行这个在新服务器上转储以获得我想要的方式.
| 归档时间: |
|
| 查看次数: |
199229 次 |
| 最近记录: |