2013-09-02 3 views
0

지연이있는 SQL 스크립트를 만들려고합니다.SQL 스크립트를 기다리지 않고 특정 시간 후에 실행할 수 있습니까?

blah blah 
WAITFOR DELAY '00:30:00' 
blah blah 

을하지만 내가 삼십분을 통해 앉아 있어야 같은 스크립트를 사용하여 :

내가 사용할 수 있습니다.

웹 사이트를 탈퇴하면 스크립트가 취소됩니다.


문제는 내가 테이블에서 무언가를 변경하고 30 분 후에 다시 자동으로 변경하려고한다는 것입니다.

변경하는 사람은 웹 페이지를 떠날 것이므로 어떤 종류의 클라이언트 측 스크립트는 문제가되지 않습니다.

30 분이 지났는데도 그 사람이 돌아올 때까지 기다릴 수는 없으며, 30 분이 경과하면 변경해야합니다.


서버에서 서비스 또는 다른 프로그램을 만들지 않고도이 작업을 수행 할 수 있습니까?

ASP/SQL 프로그래밍 만 사용. 만약 이것이 불가능하면

는 어떻게이 변화를 확인하기 위해 서버에 서비스 또는 프로그램을해야합니까?

ASP를 사용하여 웹 사이트에서 시작할 수 있어야합니다.

+1

ASP에서이 서버 측을 수행하는 경우 웹 사이트를 떠나지 않아도 내가 실수하지 않으면 스크립트가 취소되지 않습니다. –

답변

0

SQL Server 에이전트SQL 절차을 사용하여 파악했습니다.

이 내 코드는 지금까지 내장되어 기본적으로 방법은 다음 절차가있는 경우 그래서, 그것을 삭제하면

이 테이블

UPDATE table SET column = 'temp_value' WHERE column = 'normal_value' 

체크 임시 변경합니다. 테이블의 변경 사항을 되돌리려면 프로 시저를 작성하십시오. 단순히 변화 자체를 되돌릴 수없는 일이

IF EXISTS (SELECT * 
    FROM sys.objects 
    WHERE object_id = OBJECT_ID(N'myRevertProcedure') 
     AND type IN (N'P', N'PC')) 
    BEGIN 
     EXEC MyProc 
     DROP PROCEDURE myRevertProcedure 
    END 

이유 :

IF EXISTS (SELECT * 
    FROM sys.objects 
    WHERE object_id = OBJECT_ID(N'myRevertProcedure') 
     AND type IN (N'P', N'PC')) 
    DROP PROCEDURE myRevertProcedure 

CREATE PROCEDURE myRevertProcedure 
    AS 
    BEGIN 
     WAITFOR DELAY '00:30:00' 
     UPDATE table SET column = 'normal_value' WHERE column = 'temp_value' 
    END 

나는 다음과 같은 실행하는 SQL Server 에이전트에서 작업을 만들었습니다 사용자가 지연을 설정해야하기 때문입니다.

IF EXISTS (SELECT * FROM table WHERE column = 'temp_value') 
    BEGIN 
     WAITFOR DELAY '00:30:00' 
     UPDATE table SET column = 'normal_value' WHERE column = 'temp_value' 
    END 

이렇게, 나는 어떤 절차를 필요로하지 않을 :

지연에 allways 인 경우

나는 작업이 다음을 실행했습니다 수, 30 분합니다.

BTW : 작업이 몇 초마다 실행됩니다.

2

저는 개인적으로 이런 식으로 상황에 접근하지 않을 것입니다. 나는 당신의 데이터 구조가 무엇인지, 왜 30 분 동안 무언가를 바꿔야 하는지를 모른다. 그러나 나는 'Change'테이블을 사용할 것이다. ;

그래서 당신은 같은

MainTable (ID, 열 1, 열 2, COLUMN3, Column4) 뭔가가있을 수 있습니다

변경 테이블 (ID, Column1, Column2, Column3, Column4, CreatedDateTime);

주 테이블을 업데이트하는 대신 변경하면 언제든지 변경 대상 테이블에 업데이트 할 값을 삽입 할 수 있습니다 (SQL Server가 WAITFOR을 기반으로한다고 가정 함).

나는 다음보기과 같이 할 것 :

CREATE VIEW dbo.MainView 
AS 
SELECT m.ID, 
     Column1 = ISNULL(c.Column1, m.Column1), 
     Column2 = ISNULL(c.Column2, m.Column2), 
     Column3 = ISNULL(c.Column3, m.Column3) 
FROM dbo.MainTable m 
     OUTER APPLY 
     ( SELECT TOP 1 c.Column1, c.Column2, c.Column3 
      FROM dbo.ChangeTable c 
      WHERE c.ID = m.ID 
      AND  c.CreatedDate >= DATEADD(MINUTE, -30, GETDATE()) 
      ORDER BY c.CreatedDate DESC 
     ) c; 

은 다음 웹 사이트를 통해이를 참조하십시오.

공간이 문제라면 야간 작업을 설정하여 이전 항목을 삭제할 수 있습니다 (예 : 내가 스크립트를 실행하는 웹 사이트 가동 시간 모니터링 서비스를 사용하여 ...이 보드에 다른 사람이 전문가라고 생각하지 않을 것 있지만, 0시 반 개인적으로

DELETE ChangeTable 
WHERE CreatedDate < CAST(GETDATE() AS DATE); 
1

에서 실행하려면 다음을 설정합니다.예를 들어,이 페이지는 매 30 분마다 선택하는 ASP 페이지 http://www.serviceuptime.com/free_monitoring.php을 누르십시오.

개발을 쉽게하기 위해 스크립트를로드하는 데 다양한 모니터링 서비스를 사용합니다. VBS 스크립트를 만들고 장기 실행 스크립트를 위해 작업 관리자를 통해 실행하는 것과 같은 전문적인 방법이 있지만 메일 큐를 자주 확인하는 것과 같은 간단한 작업을 위해 모니터링 서비스를 사용하여 페이지를로드합니다 종종 내가 원하는 것을하기에 충분합니다.

+0

이것은 실제로 아주 영리합니다. 내 문제에 대한 좋은 해결책을 찾았으나 앞으로 더 간단한 스크립트를 생각해 보겠다. –