如何在SQL Server中重命名表?

How to rename a table in SQL Server?

我使用的SQL查询是:

1
ALTER TABLE oldtable RENAME TO newtable;

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

Server: Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'TO'.


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

1
exec sp_rename 'schema.old_table_name', 'new_table_name'


要重命名列:

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

要重命名表:

1
sp_rename 'old_table_name','new_table_name';


当使用与上述答案类似的sp_rename时,还要检查重命名后哪些对象会受到影响,该对象引用该表,因为您也需要更改这些对象。

我在Pinal Dave的博客中举了一个表依赖性的代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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'

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

或者使用一些外接程序(如果可以的话),它们中的一些具有重命名对象的功能,而且都依赖于ent对象。


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

我试过

1
2
 exec sp_rename '[database_name].[dbo].[table_name]', 'new_table_name';
 -- Invalid EXECUTE statement using object"Object", method"LockMatchID".

我要做的是把它改写为:

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

这是我使用的:

1
EXEC sp_rename 'MyTable', 'MyTableNewName';


表名

1
sp_rename 'db_name.old_table_name', 'new_table_name'

1
sp_rename 'db_name.old_table_name.name' 'userName', 'COLUMN'

索引

1
sp_rename 'db_name.old_table_name.id', 'product_ID', 'INDEX'

也可用于静态和数据类型


这里的提议没有任何效果。所以只是把数据分解成新表

1
2
3
SELECT *
INTO [acecodetable].['PSCLineReason']
FROM [acecodetable].['15_PSCLineReason'];

也许对某人有用……

在我的例子中,它不识别新的模式,而且dbo是所有者。

UPDATE

1
EXECUTE sp_rename N'[acecodetable].[''TradeAgreementClaim'']', N'TradeAgreementClaim';

为我工作。我从更新其中一个表的pk时自动生成的脚本中找到它。这样它也识别出了新的模式。