2015-02-08 2 views
1

Добрый день всем,Заменить Cursor Следующее задание номер операции с Сетом на основе эквивалент

У меня есть следующий запрос курсора, и хотел бы заменить его с помощью запроса на основе набора для решения проблем с производительностью.

DECLARE @EmpIDM CHAR(21); 
DECLARE @EmpName CHAR(21); 
DECLARE @EMPCatID INT; 

DECLARE Assign_Emp SCROLL CURSOR 
FOR 
SELECT DISTINCT EMP 
    , EMPNAME 
FROM HR_EMPLOYEES 

SET NOCOUNT ON 

OPEN Assign_Emp; 

FETCH NEXT 
FROM Assign_Emp 
INTO @EmpIDM 
    , @EmpName 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @EMPCatID = (
      SELECT TOP 1 CategoryID 
      FROM Categories 
      ) 

    UPDATE Categories 
    SET CategoryID = (CategoryID + 1) /*Increment Category ID for next Insert*/ 

    INSERT INTO Table1 (
     EmpNumber 
     , EmployeeName 
     , EmployeeCategoryID 
     ) 
    VALUES (
     @EmpIDM 
     , @EmpName 
     , @EMPCatID 
     ) 

    FETCH NEXT 
    FROM Assign_Emp 
    INTO @EmpIDM 
     , @EmpName 
END 

CLOSE Assign_Emp; 

CLOSE Assign_Emp; 

SET NOCOUNT OFF 

Моя задача заключается в адаптации следующий сегмент кода в основе работы множества

SET @EMPCatID = (
      SELECT TOP 1 CategoryID 
      FROM Categories 
      ) 

    UPDATE Categories 
    SET CategoryID = (CategoryID + 1) /*Increment Category ID for next Insert*/ 

Я скромно оцениваю любую представление о том, как я могу добиться этого.

Большое спасибо,

ответ

-1

Повторно написать с использованием темп. стол с идентификационной гратой:

declare @offset int 

select @offset = isnull(max(CategoryID),0) from Categories 

create table #data (
    EmpNumber CHAR(21), 
    EmployeeName CHAR(21), 
    EmployeeCategoryID int identity 
) 

INSERT INTO #data (
     EmpNumber 
     , EmployeeName) 
SELECT DISTINCT EmpIDM 
    , EmpName 
FROM HR_EMPLOYEES 

insert into Table1 (
     EmpNumber 
     , EmployeeName 
     , EmployeeCategoryID 
) select 
     EmpNumber 
     , EmployeeName 
     , EmployeeCategoryID + @offset 
from #data 

update Categories 
set CategoryID = (select max(EmployeeCategoryID) from #data) + @offset 
+0

О, извините, не понимал, что вы использовали это ... Как насчет использования таблицы temp с столбцом идентификации? –

+0

Это могло бы просто работать. Спасибо, это оказалось для меня головной болью. @ Владимир, ваше понимание очень полезно. Большое вам спасибо за ваши ответы. Большое спасибо. Много спасибо. –

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

  • Нет связанных вопросов^_^