ChatGPT解决这个技术问题 Extra ChatGPT

如何重命名 SQL Server 中的表?

我使用的 SQL 查询是:

ALTER TABLE oldtable RENAME TO newtable;

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

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


K
Kolappan N

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

exec sp_rename 'schema.old_table_name', 'new_table_name'

还有一件事:如果任何表名中包含 .,请在表名周围使用 []。 (我知道,我知道,但可能会出现点...)例如 sp_rename '[Stupid.name]', 'NewName' 或使用架构 sp_rename '[dbo.Stupid.name]', 'NewName'
另外,不要不小心将架构放在 'NewName' 字段中,否则您的表格最终可能看起来像 dbo.dbo.NewName
请记住,在重命名表时,您几乎肯定还希望重命名存储过程、视图、函数等中可能存在的对该表的任何引用。快速 google 可以找到可以为您执行此操作的众多工具之一.或者,您可以使用在所有这些对象中查找给定字符串的脚本,并将它们粘贴为 ALTER 语句,然后执行查找和替换,然后全部运行它们。
您还可以创建一个以旧表名命名的同义词,指向新表 CREATE SYNONYM [schema].[synonymName] FOR [schema].[tableName]
不要将新名称放在方括号中!否则该表的名称中将包含方括号。所以:'new_table_name' - 是正确的,'[new_table_name]' - 会给你带来麻烦
j
johnnyRose

要重命名列:

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

要重命名表:

sp_rename 'old_table_name','new_table_name';

E
Erik A. Brandstadmoen

表名

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'

也可用于静态和数据类型


对于 Column 您在第一个和第二个参数之间缺少逗号。它应该是:sp_rename 'db_name.old_table_name.name', 'userName', 'COLUMN'
佚名

当使用与上述答案类似的 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'

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

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


N
Nickolay

如果您尝试 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".

我必须做的就是把它改写为:

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

l
live-love

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

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

EXEC SP_RENAME 'dbo.MyTable1', 'MyTable2'

ALTER SCHEMA wrk TRANSFER dbo.MyTable2

T
Tzvi Gregory Kaidanov

从这里提出的建议没有任何效果..所以只是将数据放入新表中

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

也许对某人有用..

在我的情况下,它没有识别新模式,dbo 也是所有者。

更新

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

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