我所使用的SQL
查询语句是:
ALTER TABLE oldtable RENAME TO newtable;
但是它给了我一个错误。
服务器: Msg 156, Level 15, State 1, Line 1
关键词 'TO' 附近语法不正确。
我所使用的SQL
查询语句是:
ALTER TABLE oldtable RENAME TO newtable;
但是它给了我一个错误。
服务器: Msg 156, Level 15, State 1, Line 1
关键词 'TO' 附近语法不正确。
要在SQL Server中重命名表,请使用 sp_rename
命令:
exec sp_rename 'schema.old_table_name', 'new_table_name'
重命名列:
sp_rename 'table_name.old_column_name', 'new_column_name' , 'COLUMN';
重命名表:
sp_rename 'old_table_name','new_table_name';
sp_rename
仅支持重命名列。目前还不支持重命名表或索引。
https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-rename-transact-sql?view=sql-server-ver16 - TrailJon表名
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'
也适用于静态和数据类型。
当使用类似上面答案中的 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'
因此,所有这些依赖对象也需要进行更新
或者如果您可以的话,使用一些插件,其中一些具有重命名对象和所有依赖对象的功能
如果您尝试使用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';
更改具有不同模式的表名:
例:将dbo.MyTable1更改为wrk.MyTable2
EXEC SP_RENAME 'dbo.MyTable1', 'MyTable2'
ALTER SCHEMA wrk TRANSFER dbo.MyTable2
这里提供的方法都没有奏效,所以我只是将数据倒入了新表中。
SELECT *
INTO [acecodetable].['PSCLineReason']
FROM [acecodetable].['15_PSCLineReason'];
也许对某些人有用..
在我的情况下,它没有识别新的模式,同时dbo是所有者..
更新
EXECUTE sp_rename N'[acecodetable].[''TradeAgreementClaim'']', N'TradeAgreementClaim';
对我很有帮助。我是从更新一个表的PK时自动生成的脚本中找到的。这样它也能识别新的模式。
。
,则在表名周围使用[]
。例如,sp_rename '[Stupid.name]', 'NewName'
或带模式的表sp_rename '[dbo.Stupid.name]', 'NewName'
。 - vacipCREATE SYNONYM [schema].[synonymName] FOR [schema].[tableName]
。 - Ruskinsp_rename '[dbo.Stupid.name]'
,操作将会失败。正确的写法是:sp_rename '[dbo].[Stupid.name]'
。 - Jari Turkia