Sql server SQL Server登录更改表名需要什么权限?

Sql server SQL Server登录更改表名需要什么权限?,sql-server,entity-framework-core,entity-framework-migrations,Sql Server,Entity Framework Core,Entity Framework Migrations,我正在使用EF Core 2.1代码优先迁移构建我的数据库。我已将一个表更改为重命名。迁移最初会删除整个表,然后使用新名称读取它,因为新名称存在外键约束问题。我将迁移改为使用RenameTable方法 migrationBuilder.RenameTable("TourSpecs", "TourSpecHistory"); 运行updatedatabase时,我得到了错误信息 执行DbCommand失败(27ms)[参数=[],命令类型='Text',命令超时='30'] 声明@default

我正在使用EF Core 2.1代码优先迁移构建我的数据库。我已将一个表更改为重命名。迁移最初会删除整个表,然后使用新名称读取它,因为新名称存在外键约束问题。我将迁移改为使用
RenameTable
方法

migrationBuilder.RenameTable("TourSpecs", "TourSpecHistory");
运行
updatedatabase
时,我得到了错误信息

执行DbCommand失败(27ms)[参数=[],命令类型='Text',命令超时='30']
声明@defaultSchema sysname=SCHEMA_NAME()
EXEC(N'ALTER SCHEMA'+@defaultSchema+N'TRANSFER[TourSpecHistory].[TourSpecs];')
失败:Microsoft.EntityFrameworkCore.Database.Command[20102]
执行DbCommand失败(27ms)[参数=[],命令类型='Text',命令超时='30']
声明@defaultSchema sysname=SCHEMA_NAME()
EXEC(N'ALTER SCHEMA'+@defaultSchema+N'TRANSFER[TourSpecHistory].[TourSpecs];')

System.Data.SqlClient.SqlException(0x80131904):找不到对象“TourSpecs”,因为它不存在或您没有权限

位于System.Data.SqlClient.SqlConnection.OneError(SqlException异常,布尔断开连接,操作
1 wrapCloseInAction)
位于System.Data.SqlClient.TdsParser.ThroweException和Warning(TdsParserStateObject StateObjectObj,布尔调用连接锁,布尔异步关闭)
在System.Data.SqlClient.TdsParser.TryRun(RunBehavior RunBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean&dataReady)
位于System.Data.SqlClient.SqlCommand.RunExecuteOnQueryTds(字符串方法名、布尔异步、Int32超时、布尔异步写入)
在System.Data.SqlClient.SqlCommand.InternalExecuteOnQuery(TaskCompletionSource
1完成、布尔sendToPipe、Int32超时、布尔asyncWrite、字符串方法名)
在System.Data.SqlClient.SqlCommand.ExecuteOnQuery()上 在Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection连接、DbCommandMethod executeMethod、iRelationalyDictionary`2参数值)
客户连接ID:332393e8-8539-4c80-b24c-6478ec61b55b
错误编号:15151,状态:1,类别:16
System.Data.SqlClient.SqlException(0x80131904):找不到对象“TourSpecs”,因为它不存在或您没有权限

位于System.Data.SqlClient.SqlConnection.OneError(SqlException异常,布尔断开连接,操作
1 wrapCloseInAction)
位于System.Data.SqlClient.TdsParser.ThroweException和Warning(TdsParserStateObject StateObjectObj,布尔调用连接锁,布尔异步关闭)
在System.Data.SqlClient.TdsParser.TryRun(RunBehavior RunBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean&dataReady)
位于System.Data.SqlClient.SqlCommand.RunExecuteOnQueryTds(字符串方法名、布尔异步、Int32超时、布尔异步写入)
在System.Data.SqlClient.SqlCommand.InternalExecuteOnQuery(TaskCompletionSource
1完成、布尔sendToPipe、Int32超时、布尔asyncWrite、字符串方法名)
在System.Data.SqlClient.SqlCommand.ExecuteOnQuery()上 在Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection连接、DbCommandMethod executeMethod、iRelationalDictionary
2参数值)中执行
在Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteOnQuery(IRelationalConnection连接,iRelationalDocumentary
2参数值)
位于Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecutionQuery(IEnumerable`1 migrationCommands,IRelationalConnection连接)
位于Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(字符串targetMigration)
位于Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration,String contextType)
在Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(操作)中 客户连接ID:332393e8-8539-4c80-b24c-6478ec61b55b
错误编号:15151,状态:1,类别:16
找不到对象“TourSpecs”,因为它不存在或您没有权限

认为这只是一个权限问题,我运行了这个命令

GRANT ALTER ON SCHEMA:: [dbo].[TourSpec] TO ApplicationLogin
但是被错误击中了

找不到架构“dbo.TourSpec”,因为它不存在或您没有权限


我用来运行grant脚本的登录名具有
alteranyschema
权限。我需要做什么才能将正确的权限授予我的
ApplicationLogin
用户?

在@Sean Lange指出我对架构和对象的理解不正确后,我成功地将权限授予了我的用户,但仍然无法运行迁移。进一步查看
RenameTable
方法,我发现它在末尾包含3个可选参数,并且迁移错误地试图更改
[TourSpecHistory].[TourSpecs]


我将迁移更改为运行
migrationBuilder.RenameTable(“TourSpecs”、“dbo”、“TourSpecHistory”、“dbo”)现在它可以正常工作了

很好……“dbo.TourSpec”不是您的模式名称。模式是dbo。如果你只想要对象,而不是模式。我想你可能需要理解吗?@Igor yep,我一直听说我工作过的商店里的表本身被称为“模式”。看来我误解了这些名字