Как запускать хранимую процедуру каждый день в SQL Server Express Edition?

НЕ используйте временную метку для создания уникального URL-адреса, поскольку для каждой страницы, которую вы посещаете, кэшируется в DOM с помощью jquery mobile, и вы скоро столкнетесь с проблемой нехватки памяти на мобильных телефонах.

$jqm(document).bind('pagebeforeload', function(event, data) {
    var url = data.url;
    var savePageInDOM = true;

    if (url.toLowerCase().indexOf("vacancies") >= 0) {
        savePageInDOM = false;
    }

    $jqm.mobile.cache =  savePageInDOM;
})

код активируется перед загрузкой страницы, вы можете использовать url.indexOf (), чтобы определить, является ли URL-адресом тот, который вы хотите кэшировать или нет, и соответственно установить параметр кэша.

Не использовать window.location = ""; для изменения URL-адреса, иначе вы перейдете на адрес, а страница будет загружена не будет. Чтобы обойти эту проблему, просто используйте window.location.hash = "";

24
задан Community 23 May 2017 в 10:31
поделиться

5 ответов

Поскольку SQL Server Express не поставляется с агентом SQL, вы можете использовать планировщик Windows для запуска SQLCMD с сохраненной процедурой или сценарием SQL.

http://msdn.microsoft .com / en-us / library / ms162773.aspx

24
ответ дан 28 November 2019 в 23:25
поделиться

Вы можете использовать планировщик задач для запуска простого консольного приложения, которое будет выполнять инструкцию Sql.

0
ответ дан 28 November 2019 в 23:25
поделиться

Если вы используете Express Edition, вам нужно будет каким-то образом использовать планировщик Windows или приложение, подключающееся к серверу.

Вы должны использовать планировщик для запуска sqlcmd. Вот несколько инструкций , чтобы заставить sqlcmd работать с экспресс-версией.

4
ответ дан 28 November 2019 в 23:25
поделиться

Как вы правильно заметили, без процесса агента вам понадобится что-то еще внешнее по отношению к серверу, возможно, служба, которую вы пишете и устанавливаете, или планировщик Windows.

Обратите внимание, что с Express установка для локального приложения, возможно, что машина может не быть включена в то время, когда вы хотите усечь таблицу (скажем, вы настроили ее на усечение каждую ночь в полночь, но пользователь никогда не включает свою машину).

Таким образом, ваша запланированная задача никогда не запускается, и ваш журнал аудита выходит из-под контроля (это также проблема с агентом SQL Server, но можно предположить, что настоящий сервер будет работать без остановок). Лучшая стратегия, если эта ситуация подходит вам, может заключаться в том, чтобы приложение выполняло это по требованию, когда оно обнаруживает, что с момента усечения прошло более X дней или какова бы ни была ваша операция.

0
ответ дан 28 November 2019 в 23:25
поделиться

Я обнаружил, что у меня работает следующий механизм.

USE Master
GO

IF  EXISTS( SELECT *
            FROM sys.objects
            WHERE object_id = OBJECT_ID(N'[dbo].[MyBackgroundTask]')
            AND type in (N'P', N'PC'))
    DROP PROCEDURE [dbo].[MyBackgroundTask]
GO

CREATE PROCEDURE MyBackgroundTask
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- The interval between cleanup attempts
    declare @timeToRun nvarchar(50)
    set @timeToRun = '03:33:33'

    while 1 = 1
    begin
        waitfor time @timeToRun
        begin
            execute [MyDatabaseName].[dbo].[MyDatabaseStoredProcedure];
        end
    end
END
GO

-- Run the procedure when the master database starts.
sp_procoption    @ProcName = 'MyBackgroundTask',
                @OptionName = 'startup',
                @OptionValue = 'on'
GO

Некоторые примечания:

  • Стоит написать где-нибудь запись аудита, чтобы вы могли видеть, что запрос действительно выполняется.
  • Сервер необходимо перезагрузить один раз, чтобы сценарий запускался в первый раз.
8
ответ дан 28 November 2019 в 23:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: