2013-05-29 4 views
0

Как sql выполняет следующий процесс ниже: Потому что, когда я пытаюсь выполнить его на SSMS, он занимает около 15 секунд на элемент, однако, когда он помещается в работу агента sql, для получения результата требуется почти целая жизнь.Как оптимизировать один большой скрипт

ForProcessing is a list of items 

OPEN ForProcessing 
FETCH NEXT FROM ForProcessing into @HeaderID, @CompanyCode, @AssignedCompanyID, @BranchCode, @WorkDate 
WHILE @@FETCH_STATUS = 0 
BEGIN 

    -- EOD for S1 FILE (MMS FILE) 
    if exists (select 1 from mMiddlewareFiles where cType = 'O' and cVersion = @cVersion and cFile = 'S1FILE') 
    BEGIN 
     execute rmw_eod_S1_file @HeaderID, @AssignedCompanyID, @BranchCode, @WorkDate 
    END 
    -- EOD for SL FILE (CSA FILE) 
    if exists (select 1 from mMiddlewareFiles where cType = 'O' and cVersion = @cVersion and cFile = 'SLFILE') 
    BEGIN 
     execute rmw_eod_SL_file @HeaderID, @AssignedCompanyID, @BranchCode, @WorkDate 
    END 
    -- EOD for C FILE (CSA FILE) 
    if exists (select 1 from mMiddlewareFiles where cType = 'O' and cVersion = @cVersion and cFile = 'CFILE') 
    BEGIN 
     execute rmw_eod_C_file @HeaderID, @AssignedCompanyID, @BranchCode, @WorkDate 
    END 

    FETCH NEXT FROM ForProcessing into @HeaderID, @CompanyCode, @AssignedCompanyID, @BranchCode, @WorkDate 
END 

Если я должен создать функцию отдельно, вместо того, чтобы иметь один большой скрипт, который вызывает эти процедуры, значительно ли это приведет к увеличению производительности?

Проконсультируйтесь с этим? или как оптимизировать эту процедуру?

EDIT:

Несколько связанного с этим вопросом шахты, внутри исполняемой процедуры я нашел и далее: относится

DECLARE @a, @b, @c, @d, @e, etc... --the list grows 
SELECT @a = field2 from Parameters where field1 = 'UserName' 
SELECT @b = field2 from Parameters where field1 = 'Name' 
SELECT @c = field2 from Parameters where field1 = 'CompanyCode' 
SELECT @d = field2 from Parameters where field1 = 'MachineNo' 
SELECT @e = field2 from Parameters where field1 = 'Type' 

Как я здесь спросил SO

I хотите посоветовать о том, как его оптимизировать, лучше ли это сделать, например определить таблицу, а затем поля и просто запросить 1 раз большое время ct или тому подобное.

Если бы кто-нибудь мог также дать мне хорошую альтернативу, как убежать от следующего или пока, пожалуйста, сделайте это.

+3

Вы, кажется, не будет продвижения курсора - это то, что просто копирования и вставки ошибка? –

+0

Это была ошибка копирования, я отредактирую ее через некоторое время. –

+0

В зависимости от количества строк в курсоре, вы смотрите на огромную работу подряд за строкой. Что в муках SP, которые вы выполняете? – LoztInSpace

ответ

0

Как сказал Рори Хантер, вы не продвигаетесь в своем курсоре.

вызов

FETCH NEXT FROM ForProcessing into @HeaderID, @CompanyCode, @AssignedCompanyID, @BranchCode, @WorkDate 

снова в качестве последнего оператора в вашем цикле, в противном случае вы получите бесконечный цикл

Смежные вопросы