2012-06-18 4 views
1

SQL 쿼리에 뭔가 빠졌습니다. 누군가 올바른 방법을 알려주시겠습니까?여러 매개 변수가있는 매개 변수가있는 SQL

declare @numItems int; 
declare @value1 int; 
declare @value2 int; 
declare @currentValue int; 
declare @counter int; 
declare @qry nvarchar(max) 

set @value1 = 5; 
set @value2 = 10; 

set @numItems = 2 
set @counter=0 

WHILE (@counter < @numItems) 
BEGIN 
    set @qry = 'set @currentValue = @value' + cast(@counter+1 as nvarchar(max)) + ';' 
    exec sp_executesql @qry, N'@currentValue int OUTPUT', @currentValue OUTPUT 

    print @currentValue 

    set @counter = @counter + 1; 
END 

내가 원하는 것은 @currentValue 매개 변수는 @의 값 1과 @의 값 2의 값을 얻고,이를 출력한다는 것입니다 : 이것은 내 SQL입니다. exec 문에서 매개 변수를 올바르게 선언하는 방법을 모르겠습니다. SQL Server 2005를 사용하고 있습니다. 도움을 주셔서 감사합니다.

답변

2
declare @numItems int; 
declare @value1 int; 
declare @value2 int; 
declare @currentValue int; 
declare @counter int; 
declare @qry nvarchar(max) 

set @value1 = 5; 
set @value2 = 10; 

set @numItems = 2 
set @counter=0 

WHILE (@counter < @numItems) 
BEGIN 
    set @qry = 'set @currentValue = @value' + cast(@counter+1 as nvarchar(max)) + ';' 
    exec sp_executesql @qry, 
         N'@value1 int, @value2 int, @currentValue int OUTPUT', 
         @[email protected],@[email protected], @currentValue = @currentValue OUTPUT 

    print @currentValue 

    set @counter = @counter + 1; 
END 
+2

+1 나를 때려 눕히십시오. 참고로 @ lekso. Exec'd 쿼리는 자신의 범위입니다. 그것은 단지 exec'd중인 SQL 내부에 선언 된 항목을 볼 수 있습니다. –

+0

Martin 고마워. 내 질문에 대한 답이다. 예를 들어 많은 수의 '@@ value ..'매개 변수가있는 경우와 같이 exec 쿼리에서 @@ value1 및 @@ value2 값을 하드 코딩하지 않는 방법이 있습니까? – lekso

+0

@Tony Hopkins, 감사합니다. 나는 이것을 구현하는 방법을 정말로 이해하지 못했다고 읽었습니다. 지금 막 흥미로운 기사/게시물을 찾았습니다. http://www.sommarskog.se/dynamic_sql.html – lekso