【问题标题】:Change Schema Name Of Table In SQL在 SQL 中更改表的模式名称
【发布时间】:2013-03-07 03:28:02
【问题描述】:

我想更改数据库中表 Employees 的模式名称。在当前表Employees 数据库模式名称为dbo 我想将其更改为exe。我该怎么做 ?

例子:

来自

dbo.Employees

exe.Employees

我试过这个查询:

ALTER SCHEMA exe TRANSFER dbo.Employees

但这给了我一个错误:

无法更改架构“exe”,因为它不存在或您不存在 有权限。

我错过了什么?

【问题讨论】:

标签: sql sql-server tsql schema


【解决方案1】:

在 sql 中重命名对象要非常小心。如果你没有完全放弃你正在做的事情,你可能会导致依赖关系失败。话虽如此,只要您可以在环境中正确访问,这很容易(太多了)重命名事物:

exec sp_rename 'Nameofobject', 'ReNameofobject'

【讨论】:

  • 不幸的是,这在这种情况下不起作用, sp_rename 仅适用于更改对象的 [name] 值。您不能使用它更改架构。如果您尝试exec sp_rename 'dbo.Employees', 'exe.Employees',您将获得名称 [dbo].[exe.Employees]
  • ALTER SCHEMA(模式名称)TRANSFER (schemaName).(ObjectName);
  • 另请注意,当您更改表的架构时,使用该表的任何视图不会得到更新。您需要手动更新这些视图中的文本(模式名称)。 (叹气……)
【解决方案2】:

【讨论】:

  • 你能告诉我如何在我的情况下创建架构的例子吗?
【解决方案3】:

试试下面

declare @sql varchar(8000), @table varchar(1000), @oldschema varchar(1000), @newschema   varchar(1000)

  set @oldschema = 'dbo'
  set @newschema = 'exe'

 while exists(select * from sys.tables where schema_name(schema_id) = @oldschema)

  begin
      select @table = name from sys.tables 
      where object_id in(select min(object_id) from sys.tables where  schema_name(schema_id)  = @oldschema)

    set @sql = 'alter schema ' + @newschema + ' transfer ' + @oldschema + '.' + @table

   exec(@sql)
 end

【讨论】:

  • 我必须使用set @sql = 'alter schema [' + @newschema + '] transfer [' + @oldschema + '].' + @table 来确保某些特殊单词/字符不会导致错误。
【解决方案4】:

创建架构:

IF (NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'exe')) 
BEGIN
    EXEC ('CREATE SCHEMA [exe] AUTHORIZATION [dbo]')
END

ALTER 架构:

ALTER SCHEMA exe 
    TRANSFER dbo.Employees

【讨论】:

  • 你能解释一下什么是sys.scemas和EXEC(...)函数吗?
  • sys.schemas 是一个包含数据库所有模式的表。 Exec('...') 只是运行一个动态 SQL 调用,在这种情况下它是必需的,因为 CREATE SCHEMA 命令必须是查询批处理中的第一个语句,并且在执行动态 SQL 时执行。
  • 对于 all Tables ,检查 thisthis 在单个语句中执行此操作,希望对某人有所帮助。
  • 使用改变模式似乎非常慢。 (我在 3 分钟后停止了它以转移一个 300 行的小表。)相反,我使用 select * into exe.Employees from dbo.Employees
【解决方案5】:

你的代码是:

FROM
 dbo.Employees
TO
 exe.Employees

我试过这个查询。

ALTER SCHEMA exe TRANSFER dbo.Employees

只需写create schema exe并执行它

【讨论】:

    【解决方案6】:

    通过 SSMS,我通过以下方式创建了一个新架构:

    • 在我的服务器中单击对象资源管理器中的安全文件夹,
    • 右击模式
    • 已选择“新架构...”
    • 命名我的新架构(在您的情况下为 exe)
    • 点击确定

    我发现这篇文章是为了更改架构,但在尝试更改为新架构时也遇到了相同的权限错误。我的 SSMS 中列出了几个数据库,所以我只是尝试指定数据库并且它有效:

    USE (yourservername)  
    ALTER SCHEMA exe TRANSFER dbo.Employees 
    

    【讨论】:

      【解决方案7】:
      ALTER SCHEMA NewSchema TRANSFER [OldSchema].[TableName]
      

      当我在 SQL 中使用 ALTER SCHEMA 查询时,我总是必须使用方括号,否则会收到错误消息。

      【讨论】:

      • 向表名、表架构和/或目标架构添加方括号并没有解决我的问题。
      【解决方案8】:
      CREATE SCHEMA exe AUTHORIZATION [dbo]
      GO
      
      ALTER SCHEMA exe
      TRANSFER dbo.Employees
      GO
      

      【讨论】:

        【解决方案9】:

        确保您在 SSMS 中处于正确的数据库上下文中。遇到和你一样的错误,但我知道架构已经存在。没有意识到我在“大师”的背景下。在我将上下文更改为我的数据库后,ALTER 起作用了。

        【讨论】:

          【解决方案10】:

          万一有人在寻找低版本 -

          对于 SQL Server 2000:

          sp_changeobjectowner @objname = 'dbo.Employess' , @newowner ='exe'

          【讨论】:

            【解决方案11】:

            您还可以将数据从默认架构“dbo”传输到您的架构 来自向导 1-双击数据库图 2-右键单击您的certian实体->选择属性 3-在身份右侧,更改架构名称

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-12-13
              • 2019-12-08
              • 2019-08-11
              • 1970-01-01
              • 2019-12-07
              • 1970-01-01
              • 1970-01-01
              • 2017-11-17
              相关资源
              最近更新 更多