ced*_*lof 5 .net sql sql-server entity-framework ef-code-first
我在代码优先迁移中有以下代码:
public partial class RunSQLInit : DbMigration
{
public override void Up()
{
this.Sql(SqlFiles.Create_Job_ClearExpiredData);
}
[...]
}
Run Code Online (Sandbox Code Playgroud)
哪里SqlFiles.Create_Job_ClearExpiredData是一个以字符串形式返回 SQL 文件的 resx 文件。SQL 在 SQL Server 中创建和调度服务器代理作业。
现在,SQL 有两个“变量”,我需要在对数据库运行迁移之前进行更改:作业应该运行的数据库的名称,以及实际作业的名称。如果我只有一个环境,那会很好,但是我将这个代码优先项目部署到多个环境中,这些环境在数据库名称和我应该称之为 Job 的内容上有所不同。
我看到了三种可能性:
Update-Database在包管理器控制台中运行时,以某种方式将变量传递给迁移,该变量可以在迁移内部访问。我该怎么做?Update-Database -script)有问题的 SQL 脚本的一小部分是这样的:
EXEC msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Run SP',
@step_id=1,
@subsystem=N'TSQL',
@command=N'exec sp_ClearExpiredData;',
@database_name=@databaseName, --This is where I need the varying database name!
@flags=0
Run Code Online (Sandbox Code Playgroud)
我的问题的答案是简单地在 SQL 文件中使用它:
set @databaseName = db_name()
Run Code Online (Sandbox Code Playgroud)
由于当前上下文已经是我将用于该作业的数据库,因此它已经存在。太容易了。
| 归档时间: |
|
| 查看次数: |
2707 次 |
| 最近记录: |