2011-03-17 58 views
273

,我已经使用的SQL查询:如何重命名SQL Server中的表?

ALTER TABLE oldtable RENAME TO newtable; 

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

服务器:消息156,15级,状态1,第1行的关键字 'TO' 近
语法不正确。

回答

516

要重命名SQL Server中的表,使用sp_rename命令:

exec sp_rename 'schema.old_table_name', 'new_table_name' 
+3

还有一件事:如果任何表名中有一个'.',在表名中使用'[]'。 (我知道,我知道,但点可以发生......) 'sp_rename'[Stupid.name]','NewName''或模式'sp_rename'[dbo.Stupid.name]','NewName'' – vacip 2016-07-25 14:44:01

+14

并且添加时,不会意外地将模式放入''NewName ''字段,否则你的表最终可能会看起来像'dbo.dbo.NewName'。 – 2017-01-23 21:12:39

+1

请记住,重命名表时,您几乎肯定希望**也重命名该表中可能存在于存储过程,视图,函数等中的任何引用。**快速谷歌可以找到许多工具之一可以为你做这个。或者,您可以使用脚本在所有这些对象中查找给定的字符串,并将它们作为ALTER语句粘贴,然后执行查找并替换操作,然后全部运行它们。 – MGOwen 2017-04-19 06:33:37

106

要重命名列:

sp_rename 'table_name.old_column_name', 'new_column_name' , 'COLUMN'; 

要重命名的表:

sp_rename 'old_table_name','new_table_name'; 
9

当使用sp_rename,其工作方式与上述答案类似时,请检查als Ø该对象被重命名后的影响,引用该表,因为你需要改变那些过于

我在皮纳尔Dave的博客取为表依赖关系的代码示例here

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' 

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

或者,如果你可以使用一些附加的,他们中的一些有特点重新命名对象,以及所有依赖,耳鼻喉科对象太

1

这对我的作品。

ALTER TABLE table_name RENAME TO new_table_name; 
+1

问题被标记为*** Sql Server ***,** not ** _Oracle_ – Kiquenet 2017-03-22 08:30:51

4

表名

sp_rename "db_name.old_table_name", "new_table_name" 

sp_rename "db_name.old_table_name.name", "userName", "COLUMN" 

指数

sp_rename "db_name.old_table_name.id", "product_ID", "INDEX" 

也可用于静态和数据类型

5

如果您尝试exec sp_rename和receieve一个LockMatchID错误,那么它可能会帮助到首先添加使用[数据库]声明:

我试图

exec sp_rename '[database_name].[dbo].[table_name]', 'new_table_name'; 

我该怎么做才能解决这个问题是要改写到:

use database_name 
exec sp_rename '[dbo].[table_name]', 'new_table_name';