当前位置: 首页 > 知识库问答 >
问题:

重命名多个表

暴招
2023-03-14

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

我想把所有的表格都改成< code>abc.table。

我们有办法将数据库< code>abc中的所有名称从< code>xyz.table更改为< code>abc.table吗?

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

共有3个答案

胡俊贤
2023-03-14

我假设您已经在数据库中创建了模式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重命名每个表的架构。

exec sp_MSforeachtable "ALTER SCHEMA abc TRANSFER ? PRINT '? modified' "
籍弘伟
2023-03-14

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

  exec sp_MSforeachtable "ALTER SCHEMA new_schema TRANSFER ? PRINT '? modified' " 

使用新的Schema更改new_schema关键字。

详情请浏览链接

sp_MS可访问

更改所有表的架构

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

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
勾炜
2023-03-14

您可以让光标在xyz模式中的所有表上运行,并将所有这些表移动到abc模式中:

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
 类似资料:
  • 我有一个表,它有列[col1、col2、col3....col9]。我想在Python中把所有列数据合并到一个列中作为col?

  • 问题内容: 如何重命名以下文件: 分为以下几个: 相关代码为: 问题答案: 一行可以分为:

  • 我有一个单一的CSV文件,在其中我想重命名一些列相同的名称。我的初始代码如下所示 我用这段代码从dataframe中提取了选定的列 此切片每隔三列获取一次。现在我想用相同的名称重命名每三列一次,但这样重命名我的列会出错 有没有办法在pandas中重命名多个同名列? 除了手动操作,还有其他建议吗?

  • 问题内容: 我想重命名与名称相匹配的basedir下的所有目录。例如: 在中,我有: 我想重命名所有匹配的目录,但是我想保留前缀部分。 使用,我可以轻松地列出所有目录,如下所示: 但是,如何使用(或与其他应用程序结合)以保留前缀? 提前谢谢了! 问题答案: 在执行命令之前将目录更改为父目录,因此此处对于每个父目录都是本地的。

  • 问题内容: 我正在尝试使用Python重命名目录中的某些文件。 假设我有一个名为的文件,并且想要删除,所以我得到的文件名将是 我正在尝试使用,但无法正常工作。我也考虑过使用字符串操作,但也没有成功。 问题答案: 使用重命名或移动文件或目录。

  • 我的问题是:我正在处理一个大型工作簿中的命名区域。我需要复制数据,比如从某个工作表x中的某个命名区域复制数据,并将其粘贴到另一个命名区域,比如WKSheetY,然后才能对其进行排序,并将其显示在wksheet Z中的另一个区域上。 我通过vba实现了所有这些,只是在执行代码时屏幕闪烁很多。 Im使用语句application.goto reference:=“”来选择范围,这会激活这些工作表,因此