2012-11-13 3 views
0

고유 ID를 반환하는 저장 프로 시저가 있습니다. 각 행의 고유 ID를 얻으려면이 sp를 호출해야합니다. 응용 프로그램에서도 이것을 사용하므로이 SP를 사용해야합니다.select 문에서 각 행에 대해 저장 프로 시저를 실행하는 방법은 무엇입니까?

각 행에 대해 SP에서 반환되는 ID를 선택하려면 어떻게해야합니까?

CREATE procedure [dbo].[SelectNextNumber] 

@TableName nvarchar(255) 
as 
begin 

    declare @NewSeqVal int 

    set NOCOUNT ON 

    update Number --This is a table that holds for each table the max ID 

    set @NewSeqVal = Next = Next + Increase 

    where TableNaam= @TableName 

    if @@rowcount = 0 
    begin 
     Insert into Number VALUES (@TableName, 1, 1) 
     return 1 
    end 

    return @NewSeqVal 

수 테이블 : 나는 동안 루프이 사용 가능하다하지만 내 상황에서 내가 while 루프를 사용하는 방법을 모르는 보았다

CREATE TABLE [dbo].[Number](
    [TableName] [varchar](25) NOT NULL, 
    [Next] [int] NULL, 
    [Increase] [int] NULL 

.

+0

도움이 될 수 있으면 루프를 피하십시오. 집합 기반 연산은 대개 더 빠릅니다. 일련 번호를 생성하기 위해'Row_Number()'또는 순위 함수를 살펴 보는 것이 좋겠지 만, 여기서 다시 성취하려고하는 것은 확실하지 않습니다. 신원 열을 다시 발명하려는 것 같습니다. – Bridge

답변

1

을 .. 떨어져 SELECT :

일시적으로

을 SELECT 결과를 멀리 저장
declare @rc int, @NewSeqVal int; 
SELECT .. 
    INTO #tmp -- add this 
    FROM .. 

스토어 행 개수와 수 많은 숫자

set @rc = @@rowcount; 

하는 직접 SP의 코드를 사용해야합니다 : 마지막으로

update Number --This is a table that holds for each table the max ID 
set @NewSeqVal = Next = Next + @rc 
where TableNaam= 'sometbl'; 

,

INSERT ... 
SELECT ID = @NewSeqVal + 1 - row_number() over (ORDER BY col1) 
     , {all the other columns} 
FROM #tmp; 

ORDER by Col1가 임의 삽입, 재치있는 무언가를 선택하거나 '돈 경우 ORDER BY NEWID() 그것을 만들 간병.

3

SELECT 문 내에서 저장 프로 시저를 사용할 수 없으며 함수 만 사용할 수 있습니다. 당신이 정말로 저장 프로 시저를 사용해야 할 경우 커서가있는 결과 집합을 반복 할 수

http://msdn.microsoft.com/library/ms180169.aspx

편집 : 난 당신이 정말 필요한 것을 이해하는 것은 매우 확실하지 않다 정직하기를 너 자신이 IDENTITY를 만드는 것처럼 보입니다 (http://msdn.microsoft.com/library/ms174639(v=sql.105).aspx); 당신이 정말로 커서를 실행해야하는 경우 여전히 여기 저장 프로 시저를 사용하는 예입니다 :에 단일 INSERT 촬영

http://sqlfiddle.com/#!3/2b81a/1

+0

나는 시도했다. 그러나 나는 잘 모르고 있었다.. 당신은 나의 상황에 대한 모범이 있습니까? – Ahmet

+1

@Ahmet : SQL Server에 관한 ** 모든 ** ** ** 멋진 ** 무료로 제공되는 ** 설명서] (http://msdn.microsoft.com/en-us/library/ms180169.aspx) MSDN 사이트 .... –

관련 문제