首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重命名多个表

重命名多个表
EN

Stack Overflow用户
提问于 2012-06-08 12:00:16
回答 4查看 9.9K关注 0票数 3

在SQL Server中,我有一个数据库abc。在这个数据库中,我有数百个表。这些表中的每一个都称为xyz.table

我想把所有的表都改成abc.table

我们是否有办法将数据库abc中的所有名称从xyz.table更改为abc.table

我可以通过将每个表的模式更改为abc来手动更改名称

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-08 13:03:08

您可以将Alter Schema与一个未记录在案的存储过程exec sp_MSforeachtable一起使用,它基本上遍历所有的表。

代码语言:javascript
运行
复制
  exec sp_MSforeachtable "ALTER SCHEMA new_schema TRANSFER ? PRINT '? modified' " 

使用新架构更改new_schema关键字。

有关详细信息,请访问链接

sp_MSforeachtable

Alter Schema for all the tables

正如其他人指出的那样,SP已弃用,因此还有另一种方法可以通过从sys.tables获取表的名称来实现此目的

代码语言:javascript
运行
复制
Declare @value int
Set @value=1
declare @sql varchar(max), @table varchar(50), @old varchar(50), @new varchar(50)

set @old = 'dbo'
set @new = 'abc'

while exists(select * from sys.tables where schema_name(schema_id) = @old)

begin
;With CTE as
 (
  Select *,row_number() over(order by object_id) rowNumber from sys.tables 
  where schema_name(schema_id) = @old
 )
 select @table= name from CTE where @value=rowNumber
 Set @value=@value+1

 set @sql = 'alter schema ' + @new + ' transfer ' + @old + '.' + @table

 exec(@sql)
 end
票数 4
EN

Stack Overflow用户

发布于 2012-06-08 13:07:25

您可以使用游标遍历xyz模式中的所有表,并将所有这些表移动到abc模式中:

代码语言:javascript
运行
复制
DECLARE TableCursor CURSOR FAST_FORWARD 
FOR
    -- get the table names for all tables in the 'xyz' schema
    SELECT t.Name
    FROM sys.tables t 
    WHERE schema_id = SCHEMA_ID('xyz')

DECLARE @TableName sysname

OPEN TableCursor

FETCH NEXT FROM TableCursor INTO @TableName

-- iterate over all tables found    
WHILE @@FETCH_STATUS = 0
BEGIN
    DECLARE @Stmt NVARCHAR(999)

    -- construct T-SQL statement to move table to 'abc' schema
    SET @Stmt = 'ALTER SCHEMA abc TRANSFER xyz.' + @TableName
    EXEC (@Stmt)

    FETCH NEXT FROM TableCursor INTO @TableName
END

CLOSE TableCursor
DEALLOCATE TableCursor
票数 8
EN

Stack Overflow用户

发布于 2012-06-08 13:04:54

我假设您已经在数据库中创建了模式abc

如果没有,你可以在这里参考

http://www.youtube.com/watch?v=_DDgv8uek6M

http://www.quackit.com/sql_server/sql_server_2008/tutorial/sql_server_database_schemas.cfm

要更改数据库中所有表的模式,可以使用以下系统创建的msforeachtable存储过程,用alter schema重命名每个表的模式。

代码语言:javascript
运行
复制
exec sp_MSforeachtable "ALTER SCHEMA abc TRANSFER ? PRINT '? modified' "
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10942901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档