2011-05-11 7 views
25

내가 저장 프로 시저를 테스트하고 매개 변수 대신 'GETDATE()'기능을 제출하고 싶어 해요 :저장 프로 시저를 실행할 때 함수를 매개 변수로 사용 하시겠습니까?

DECLARE @return_value int 
EXEC @return_value = my_store procedure 
     @MyId = 1, 
     @MyDateField = GETDATE() 
SELECT 'Return Value' = @return_value 
GO 

SQL Server 2005에서 다음과 같은 오류로 불평 :

Incorrect syntax near ')'.

누구가 창고에 관심 문제에 대한 약간의 조명? 당신은 변수에 할당해야

- 매개 변수 (사용 된 사람들이 전역 변수를 호출 할 즉 @@ 접두어하는 시스템 기능을 제외하고) 허용되지 않습니다으로

답변

12

Execute a stored procedure or function 
[ { EXEC | EXECUTE } ] 
    { 
     [ @return_status = ] 
     { module_name [ ;number ] | @module_name_var } 
     [ [ @parameter = ] { value 
          | @variable [ OUTPUT ] 
          | [ DEFAULT ] 
          } 
     ] 
     [ ,...n ] 
     [ WITH RECOMPILE ] 
    } 
[;] 

    Execute a character string 
    { EXEC | EXECUTE } 
     ({ @string_variable | [ N ]'tsql_string' } [ + ...n ]) 
     [ AS { LOGIN | USER } = ' name ' ] 
    [;] 

    Execute a pass-through command against a linked server 
    { EXEC | EXECUTE } 
     ({ @string_variable | [ N ] 'command_string [ ? ]' } [ + ...n ] 
      [ { , { value | @variable [ OUTPUT ] } } [ ...n ] ] 
     ) 
     [ AS { LOGIN | USER } = ' name ' ] 
     [ AT linked_server_name ] 
    [;] 

공지 사항을 사용할 수 되었 값 또는 변수를 지정하십시오. 기본값을 지정할 수 있습니다. 그래서 변수의 값을 GetDate() (다른 변수가 지정한 것처럼)로 설정하고 해당 변수를 사용해야합니다.

HTH

+0

Raja 덕분에 도움이되었습니다. 게시 된 정의를 읽는 법을 배워야합니다. – krul

9

기능 호출합니다.

Microsoft는이이 관련 연결 항목에 큰 미만 인정 : T-SQL: use scalar functions as stored procedure parameters

Agreed! More generally, wherever TSQL expects, say, and integer value, it should accept a literal, a variable, or the result of a function whose return type is integer. It just makes the language more regular ("orthogonal") and easier to learn/use.

That said, it's too late for this feature in the Katmai release, but I'll add it to our TODO list.

25

당신은 저장 프로 시저 매개 변수로 직접 기능을 사용할 수 없습니다.

당신은 다음과 같은 작업을 수행 할 수

DECLARE @now DateTime 
SET @now = GETDATE() 

DECLARE @return_value int 
EXEC @return_value = my_stored_procedure 
     @MyId = 1, 
     @MyDateField = @now 
SELECT 'Return Value' = @return_value 
GO 
+0

변수를 만들 수 있지만이 구조에 대해 궁금합니다. – krul

+0

@krul - 당신이 사용했던 문구가 "문제에 대해 약간의 빛"을 모호합니다. 제한이 존재하는 이유를 묻고 싶다면 정확하게 물어야합니다. – Oded

+1

@Oded : krul이 신경 쓰는지 모르겠지만 알고 싶습니다. 이 제한이있는 이유는 무엇입니까? 필자가 알고있는 거의 모든 언어에서 함수 호출을 인수로 사용할 수 있으며 예상 된 방식으로 작동합니다 (함수가 평가되면 반환 값이 인수로 전달됩니다). 왜 SQL은 이것을 허용하지 않습니까? –

0

보십시오 : 당신이)합니다 (에 GetDate에 전달해야 할 이유

DECLARE @return_value int 
EXEC @return_value = my_store procedure 
     @MyId = 1, 
     @MyDateField = (SELECT GETDATE()) 
SELECT 'Return Value' = @return_value 
GO 
-1

. 그냥 호출 된 저장 프로 시저에서 사용하십시오.

직접 전달할 수 없습니다. 그냥 변수에 할당하고

DECLARE @dt as datetime 
SET @dt=GETDATE() 

EXEC @return_value = my_store procedure 
     @MyId = 1, 
     @MyDateField = dt 
1

당신은 @parameter 당신이 할 수있는 위해

DECLARE @test DATE; 
SET @test = GETDATE(); 

및 MSDN 당 다음

DECLARE @return_value int 
EXEC @return_value = my_store procedure 
     @MyId = 1, 
     @MyDateField = @test 
SELECT 'Return Value' = @return_value 
GO 
관련 문제