我想更改Employees
数据库中表的架构名称。在当前表中,Employees
数据库架构名称是dbo
我想要将其更改为exe
。我该怎么做 ?
例:
从
dbo.Employees
至
exe.Employees
我尝试了以下查询:
ALTER SCHEMA exe TRANSFER dbo.Employees
但这给我一个错误:
无法更改架构“ exe”,因为它不存在或您没有权限。
我错过了什么?
我想更改Employees
数据库中表的架构名称。在当前表中,Employees
数据库架构名称是dbo
我想要将其更改为exe
。我该怎么做 ?
例:
从
dbo.Employees
至
exe.Employees
我尝试了以下查询:
ALTER SCHEMA exe TRANSFER dbo.Employees
但这给我一个错误:
无法更改架构“ exe”,因为它不存在或您没有权限。
我错过了什么?
Answers:
创建架构:
IF (NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'exe'))
BEGIN
EXEC ('CREATE SCHEMA [exe] AUTHORIZATION [dbo]')
END
更改模式:
ALTER SCHEMA exe
TRANSFER dbo.Employees
sys.schemas
是包含数据库所有架构的表。Exec('...')只是运行一个动态SQL调用,在这种情况下它是必需的,因为CREATE SCHEMA命令必须是查询批处理中的第一个语句,并且随着动态SQL的执行而执行此操作。
试试下面
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
以确保某些特殊的单词/字符不会引起错误。
看看MSDN ...
CREATE SCHEMA
:http://msdn.microsoft.com/en-us/library/ms189462.aspx
然后
ALTER SCHEMA
:http://msdn.microsoft.com/en-us/library/ms173423.aspx
或者您可以在SO上检查它...
在sql中重命名对象时要非常小心。如果您没有完全放弃所做的工作,则可能导致依赖项失败。话虽如此,只要您在环境中具有适当的访问权限,这就很容易(太多)重命名内容:
exec sp_rename 'Nameofobject', 'ReNameofobject'
exec sp_rename 'dbo.Employees', 'exe.Employees'
您将获得名称[dbo]。[exe.Employees]
确保您在SSMS中处于正确的数据库环境中。遇到与您相同的错误,但是我知道该模式已经存在。没意识到我处于“主”环境中。在将上下文更改为数据库后,ALTER工作了。