我一直在研究 T-SQL 中的代码,以使用 msdb 数据库中的 sp_add_jobschedule proc 向 SQL 代理作业添加新计划。当我添加新计划(通常在特定日期/时间运行一次)并立即查看 sysjobschedules 和 sysschedules 中的值时,我可以看到新计划已添加并与我的 SQL 代理的 job_id 相关联工作。但是,next_run_date 和 next_run_time 的值在其中为 0。当我在 2 或 3 分钟后再次查看它们时,它们仍然显示为 0。但是,当我再过 5 或 10 分钟后再回来时,它现在可以正确显示与下一次计划运行相对应的日期和时间值。
所以我的问题是:
我用来添加新计划的代码示例:
exec msdb.dbo.sp_add_jobschedule @job_id = @jobID
, @name = @JobName
, @enabled = 1
, @freq_type = 1
, @freq_interval = 0
, @freq_subday_type = 0
, @freq_subday_interval = 0
, @freq_relative_interval = 0
, @freq_recurrence_factor = 0
, @active_start_date = …Run Code Online (Sandbox Code Playgroud) 我有一组需要存储在 Oracle 数据库中的开始和结束时间。我需要以一种易于搜索的方式存储它们(即,典型的搜索是查找时间值(例如上午 9:30)落在开始时间和结束时间之间的所有行。在 SQL Server 中,我只会使用 TIME 数据类型字段,但 Oracle 似乎没有等效项。
我看过许多博客和论坛,他们建议只使用 DATE 字段并使用 TO_CHAR 进行转换,然后进行比较,或者将时间值存储为 varchar(4 / HHMM) 或 varchar(6 / HHMMSS) 字段。这两者似乎都不必要地低效。
在 Oracle 中是否有更好或更有效的方法来完成此任务?
我们有仍然使用 xp_cmdshell 调用的遗留代码。当我们迁移到 SQL Server 2008 时,我们创建了一个使用以下模式代码的存储过程:
EXECUTE AS 'DOMAIN\ID2'
EXEC master..xp_cmdshell @command
REVERT
Run Code Online (Sandbox Code Playgroud)
当我将 WHOAMI 作为命令传递时,它显示的不是“DOMAIN\ID2”,而是运行 SQL Server 的服务帐户的 ID(即“DOMAIN\ID1”)。它不应该返回 'DOMAIN\ID2',因为它应该在不同的安全上下文下运行吗?如果是这样,知道为什么它不会改变上下文吗?这个过程是由另一个现在早已不复存在的开发人员创建的,我对安全性和模拟并不像我应该的那样熟悉。