2014-09-03 2 views
0

뷰에서 선택한 레코드를 가져 오는 테스트 저장 프로 시저를 만들었습니다. 나는 SQL Server Management Studio를 사용하여 2012 년 내가 그것을 만드는 데 사용되는 코드는 다음과 같습니다저장 프로 시저 실행시 매개 변수 선언

create procedure [dbo].[andytest] 
@CpnyID char(3) 
, @FiscYr char(4) 
, @LedgerID char(10) 
, @Acct char(10) 
as select * From dbo.view_Normal_AcctHist_Leads_AllEntities 
where CpnyID in(@CpnyID) 
and FiscYr in(@FiscYr) 
and LedgerID in(@LedgerID) 
and Acct in(@Acct) 

I을 실행 사용 : 내가 눈치 챘을

exec andytest 
    @CpnyID= '131' 
    ,@FiscYr='2014' 
    ,@LedgerID='Actual' 
    ,@Acct='637100' 

때 '실행'으로 내가 스크립트 절차를

DECLARE @CpnyID char(3) 
DECLARE @FiscYr char(4) 
DECLARE @LedgerID char(10) 
DECLARE @Acct char(10) 

-- TODO: Set parameter values here. 
set @CpnyID= '131' 
set @FiscYr='2014' 
set @LedgerID='Actual' 
set @Acct='637100' 

EXECUTE [dbo].[andytest] 
    @CpnyID 
    ,@FiscYr 
    ,@LedgerID 
    ,@Acct 

내 질문 실행할 때 왜 절차는 필요를 만들 때 정의 된 변수를 다시 선언 할 것이다 내가이 페이지에서 사용해야하는 방법 문제를 수행합니다, 오는 코드는 관절 사건?

감사

, 앤디

+2

스크립트 실행을 사용하면 매개 변수가 생성됩니다. 일반적으로 저장 프로 시저를 호출 할 때는 하드 코드 된 값이 아니라 매개 변수를 전달합니다. 또한 프로 시저 코드에주의하십시오. = 대신 IN을 사용 중입니다. 구분 된 목록을 매개 변수의 값으로 전달하고 프로 시저에서 목록을 반환 할 수 있다고 생각합니다. 매개 변수가 그런 식으로 작동하지 않습니다. –

+0

답변과 의견을 보내 주셔서 감사합니다. 그들은 모두 도움이되었다. – Andy

답변

1

...

DECLARE @CpnyID char(3) 
DECLARE @FiscYr char(4) 
DECLARE @LedgerID char(10) 
DECLARE @Acct char(10) 

-- TODO: Set parameter values here. 
set @CpnyID = '131' 
set @FiscYr = '2014' 
set @LedgerID = 'Actual' 
set @Acct  = '637100' 

EXECUTE [dbo].[andytest] @CpnyID = @CpnyID 
          ,@FiscYr = @FiscYr 
          ,@LedgerID = @LedgerID 
          ,@Acct  = @Acct 

또는 당신이 직접이 같은 프로 시저 변수에 값을 전달 ......

EXECUTE [dbo].[andytest] @CpnyID = '131' 
          ,@FiscYr = '2014' 
          ,@LedgerID = 'Actual' 
          ,@Acct  = '637100' 

그것은 어떤 차이가 나던 , 유일한 변수는 다른 프로 시저 또는 API 또는 다른 종류의 다른 응용 프로그램에서이 값을 가져올 때 사용됩니다.

그래서 변수를 선언하고 다른 소스에서 전달 된 값에서 변수를 채우고이 프로 시저에 전달합니다. 그렇지 않으면 현명한 기능이 없습니다.

0

변수가 즉, 다시 선언되지 않는이 저장 프로 시저이 필요하지 않습니다. 쿼리 창에서이 쿼리 창에 값을 다시 할당하기 전에 vars를 선언해야합니다. vars를 실제 값으로 바꿀 수 있습니다. 이 같은 실행 여부

EXEC @return_value = [dbo].[andytest] 
     @CpnyID = N'2', 
     @FiscYr = N'2', 
     @LedgerID = N'3', 
     @Acct = N'4' 
관련 문제