如何在SQL Server中重命名表?

Swi*_*tch 361 sql-server rename alter-table

SQL我使用的查询是:

ALTER TABLE oldtable RENAME TO newtable;
Run Code Online (Sandbox Code Playgroud)

但是,它给了我一个错误.

服务器:消息156,级别15,状态1,行1
关键字"TO"附近的语法不正确.

Jef*_*nby 662

要在SQL Server中重命名表,请使用以下sp_rename命令:

exec sp_rename 'schema.old_table_name', 'new_table_name'
Run Code Online (Sandbox Code Playgroud)

  • 并且,添加,_don't_意外地将模式放在"'NewName"字段中,否则您的表可能最终看起来像`dbo.dbo.NewName`. (51认同)
  • 还有一件事:如果任何表名中都有`.`,请在表名周围使用`[]`.(我知道,我知道,但点可能发生......)例如`sp_rename'[Stupid.name]','NewName'`或模式`sp_rename'[dbo.Stupid.name]','NewName' (4认同)
  • 请记住,重命名表时,您几乎肯定也想要重命名存储过程,视图,函数等中可能存在的对该表的任何引用.**快速谷歌可以找到许多工具之一为你做这件事.或者,您可以使用在所有这些对象中查找给定字符串的脚本,并将它们粘贴为ALTER语句,然后执行查找和替换,然后运行它们. (3认同)
  • 您还可以创建一个以旧表名命名的同义词,它指向新表`CREATE SYNONYM [schema]。[synonymName] FOR [schema]。[tableName]`” (2认同)
  • 不要将新名称放在方括号中!否则,表的名称中将包含方括号。所以:“new_table_name” - 是正确的,“[new_table_name]” - 会给你带来麻烦 (2认同)

小智 138

要重命名列:

sp_rename 'table_name.old_column_name', 'new_column_name' , 'COLUMN';
Run Code Online (Sandbox Code Playgroud)

要重命名表:

sp_rename 'old_table_name','new_table_name';
Run Code Online (Sandbox Code Playgroud)


小智 14

使用sp_rename时,如上面的答案一样,检查重命名后哪些对象受影响,引用该表,因为你也需要更改它们

我在Pinal Dave的博客中找到了表依赖的代码示例

USE AdventureWorks
GO
SELECT
referencing_schema_name = SCHEMA_NAME(o.SCHEMA_ID),
referencing_object_name = o.name,
referencing_object_type_desc = o.type_desc,
referenced_schema_name,
referenced_object_name = referenced_entity_name,
referenced_object_type_desc = o1.type_desc,
referenced_server_name, referenced_database_name
--,sed.* -- Uncomment for all the columns
FROM
sys.sql_expression_dependencies sed
INNER JOIN
sys.objects o ON sed.referencing_id = o.[object_id]
LEFT OUTER JOIN
sys.objects o1 ON sed.referenced_id = o1.[object_id]
WHERE
referenced_entity_name = 'Customer'
Run Code Online (Sandbox Code Playgroud)

因此,所有这些依赖对象也需要更新

或者如果可以的话,使用一些加载项,其中一些具有重命名对象的功能,并且所有依赖,也是ent对象


Sti*_*ian 10

如果您尝试exec sp_rename接收LockMatchID错误,那么首先添加use [database]语句可能会有所帮助:

我试过了

 exec sp_rename '[database_name].[dbo].[table_name]', 'new_table_name';
 -- Invalid EXECUTE statement using object "Object", method "LockMatchID".
Run Code Online (Sandbox Code Playgroud)

我需要做的就是将其重写为:

use database_name
exec sp_rename '[dbo].[table_name]', 'new_table_name';
Run Code Online (Sandbox Code Playgroud)


bud*_*rdi 9

表名

sp_rename 'db_name.old_table_name', 'new_table_name'
Run Code Online (Sandbox Code Playgroud)

sp_rename 'db_name.old_table_name.name' 'userName', 'COLUMN'
Run Code Online (Sandbox Code Playgroud)

指数

sp_rename 'db_name.old_table_name.id', 'product_ID', 'INDEX'
Run Code Online (Sandbox Code Playgroud)

也可用于静态和数据类型

  • 对于Column,您缺少第一个和第二个参数之间的逗号。它应该是:sp_rename'db_name.old_table_name.name','userName','COLUMN' (2认同)

liv*_*ove 8

要更改具有不同架构的表名称:

示例:将 dbo.MyTable1 更改为 wrk.MyTable2

EXEC SP_RENAME 'dbo.MyTable1', 'MyTable2'

ALTER SCHEMA wrk TRANSFER dbo.MyTable2
Run Code Online (Sandbox Code Playgroud)


Syl*_*gue 6

这是我使用的:

EXEC sp_rename 'MyTable', 'MyTableNewName';
Run Code Online (Sandbox Code Playgroud)