如何在SQL Server中重命名表?

问题描述 投票:345回答:7

我使用的SQL查询是:

ALTER TABLE oldtable RENAME TO newtable;

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

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

sql-server rename alter-table
7个回答
645
投票

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

exec sp_rename 'schema.old_table_name', 'new_table_name'

134
投票

要重命名列:

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

要重命名表:

sp_rename 'old_table_name','new_table_name';

14
投票

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

我在Pinal 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'

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

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


9
投票

如果您尝试使用qazxsw poi并收到LockMatchID错误,那么首先添加use [database]语句可能会有所帮助:

我试过了

exec sp_rename

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

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

6
投票

这是我使用的:

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

6
投票

表名

EXEC sp_rename 'MyTable', 'MyTableNewName';

sp_rename 'db_name.old_table_name', 'new_table_name'

指数

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

也可用于统计和数据类型


0
投票

这里提出的任何工作都没有。所以只是将数据打入新表

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

也许对某人有用..

在我的情况下,它不承认新的架构也dbo是所有者..

UPDATE

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

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


0
投票

要使用不同的架构更改表名称:

示例:将dbo.Table1更改为work.MyTab2

EXECUTE sp_rename N'[acecodetable].[''TradeAgreementClaim'']', N'TradeAgreementClaim';
© www.soinside.com 2019 - 2024. All rights reserved.