Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改SQL中表的架构名称_Sql_Sql Server_Tsql_Schema - Fatal编程技术网

更改SQL中表的架构名称

更改SQL中表的架构名称,sql,sql-server,tsql,schema,Sql,Sql Server,Tsql,Schema,我想更改数据库中表Employees的架构名称。在当前表Employees中,数据库架构名称为dbo我想将其更改为exe。我怎么做 FROM dbo.Employees TO exe.Employees 例如: FROM dbo.Employees TO exe.Employees 从 FROM dbo.Employees TO exe.Employees 到 FROM dbo.Employees TO exe.Employees 我尝试了以下查询: ALTER SCHE

我想更改数据库中表
Employees
的架构名称。在当前表
Employees
中,数据库架构名称为
dbo
我想将其更改为
exe
。我怎么做

FROM
 dbo.Employees
TO
 exe.Employees
例如:

FROM
 dbo.Employees
TO
 exe.Employees

FROM
 dbo.Employees
TO
 exe.Employees

FROM
 dbo.Employees
TO
 exe.Employees
我尝试了以下查询:

ALTER SCHEMA exe TRANSFER dbo.Employees
FROM
 dbo.Employees
TO
 exe.Employees
但这给了我一个错误:

FROM
 dbo.Employees
TO
 exe.Employees
无法更改架构“exe”,因为它不存在或您不存在 请允许

FROM
 dbo.Employees
TO
 exe.Employees

我错过了什么

在sql中重命名对象时要非常小心。如果您没有完全完成所做的工作,则可能导致依赖关系失败。话虽如此,如果您能够正确访问环境,那么重命名东西很容易(太容易了):

exec sp_rename 'Nameofobject', 'ReNameofobject'
FROM
 dbo.Employees
TO
 exe.Employees
查看MSDN

FROM
 dbo.Employees
TO
 exe.Employees
创建架构

FROM
 dbo.Employees
TO
 exe.Employees
然后

FROM
 dbo.Employees
TO
 exe.Employees
ALTER SCHEMA

FROM
 dbo.Employees
TO
 exe.Employees
或者你可以检查一下,这样

FROM
 dbo.Employees
TO
 exe.Employees

试试下面的方法

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
FROM
 dbo.Employees
TO
 exe.Employees

创建架构:

IF (NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'exe')) 
BEGIN
    EXEC ('CREATE SCHEMA [exe] AUTHORIZATION [dbo]')
END
FROM
 dbo.Employees
TO
 exe.Employees
改变模式:

ALTER SCHEMA exe 
    TRANSFER dbo.Employees
FROM
 dbo.Employees
TO
 exe.Employees

您的代码是:

FROM
 dbo.Employees
TO
 exe.Employees
我试着回答这个问题

FROM
 dbo.Employees
TO
 exe.Employees
ALTER SCHEMA exe TRANSFER dbo.Employees

只需编写
创建模式exe
并通过SSMS执行它

,我通过以下方式创建了一个新模式:

FROM
 dbo.Employees
TO
 exe.Employees
  • 单击“我的服务器”中对象资源管理器中的安全文件夹
  • 右键单击的模式
  • 选择“新架构…”
  • 命名为我的新模式(在您的案例中为exe)
  • 点击OK
我发现这篇文章更改了模式,但在尝试更改为新模式时也出现了相同的权限错误。我的SSMS中列出了多个数据库,因此我只是尝试指定数据库,它起了作用:

FROM
 dbo.Employees
TO
 exe.Employees
USE (yourservername)  
ALTER SCHEMA exe TRANSFER dbo.Employees 

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

请确保您在SSMS中处于正确的数据库上下文中。得到了与您相同的错误,但我知道模式已经存在。我不知道我是在“大师”的背景下。ALTER在我将上下文更改为数据库后工作。

万一有人在寻找较低版本-

FROM
 dbo.Employees
TO
 exe.Employees
CREATE SCHEMA exe AUTHORIZATION [dbo]
GO

ALTER SCHEMA exe
TRANSFER dbo.Employees
GO
对于SQL Server 2000:

FROM
 dbo.Employees
TO
 exe.Employees

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

有吗?架构exe存在吗?没有,我没有创建。我应该怎么做才能创建它呢?运行
createschema
:我看过这篇文章,但有点让人困惑。你能告诉我在我的情况下如何创建模式吗?不幸的是,这在这种情况下不起作用,sp_rename只适用于更改对象的[name]值。您无法使用它更改架构。如果您尝试
exec sp_重命名'dbo.Employees','exe.Employees',
您将得到名称[dbo].[exe.Employees]ALTER SCHEMA(SCHEMA名称)TRANSFER(schemaName)。(ObjectName);还要注意,当您更改表的架构时,使用该表的任何视图都不会得到更新。您需要手动更新这些视图中的文本(架构名称)。(叹气…)你能给我举一个在我的情况下如何创建模式的例子吗?你能解释一下什么是sys.scemas和EXEC(…)函数吗?
sys.schemas
是一个包含数据库所有模式的表。Exec(“…”)只是运行一个动态SQL调用,在这种情况下需要它,因为CREATE SCHEMA命令必须是查询批处理中的第一条语句,并以动态SQL的方式执行。对于所有表,检查并在单个语句中执行,希望对某些表有所帮助。使用alter SCHEMA似乎非常缓慢。(我在3分钟后停止了它,以便传输一个300行的小表。)相反,我使用select*转换为exe。来自dbo.Employees的员工我必须使用
set@sql='alter schema['+@newschema+']transfer['+@oldschema+'].++@table
来确保某些特殊的单词/字符不会导致错误。
FROM
 dbo.Employees
TO
 exe.Employees