8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何在 SQL Server 中重命名表?

Frederik 1月前

27 0

我使用的 SQL 查询是:ALTER TABLE oldtable RENAME TO newtable; 但是,它给出了错误。服务器:消息 156,级别 15,状态 1,第 1 行关键字“TO”附近的语法不正确。

我使用的查询是 SQL

ALTER TABLE oldtable RENAME TO newtable;

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

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

帖子版权声明 1、本帖标题:如何在 SQL Server 中重命名表?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Frederik在本站《sql-server》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 要在 SQL Server 中重命名表,请使用 sp_rename 命令:

    exec sp_rename 'schema.old_table_name', 'new_table_name'
    
  • jww 1月前 0 只看Ta
    引用 3

    还有一件事:如果任何表名中都有 .,请在表名周围使用 []。(我知道,我知道,但可能会出现点......)例如 sp_rename '[Stupid.name]', 'NewName' 或使用架构 sp_rename '[dbo.Stupid.name]', 'NewName'

  • 另外,不要意外地将模式放在“NewName”字段中,否则您的表最终可能看起来像dbo.dbo.NewName。

  • 请记住,重命名表时,您几乎肯定还想重命名存储过程、视图、函数等中可能存在的任何对该表的引用。快速谷歌一下就可以找到许多可以为您执行此操作的工具之一。或者您可以使用在所有这些对象中查找给定字符串的脚本,将它们粘贴为 ALTER 语句,然后执行查找和替换,然后运行它们。

  • 还可以创建一个以旧表名命名的同义词指向新表 CREATE SYNONYM [schema].[synonymName] FOR [schema].[tableName]

  • 不要将新名称放在方括号中!否则表的名称中会有方括号。因此:“new_table_name”是正确的,“[new_table_name]”会给你带来麻烦

  • 要重命名列:

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

    要重命名表:

    sp_rename 'old_table_name','new_table_name';
    
  • 这里需要注意的是,Azure Synapse Analytics SQL Pools 的 sp_rename 仅支持重命名列。尚不支持重命名表或索引。learn.microsoft.com/en-us/sql/relational-databases/…

  • 表名

    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 'db_name.old_table_name.name', 'userName', 'COLUMN'

  • 当使用与上述答案类似的 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 错误,那么首先添加使用 [数据库] 语句可能会有所帮助:

    我试过

     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 时自动生成的脚本中找到了它。这样它也能识别新的架构。

返回
作者最近主题: