2013-01-08 2 views
20

테이블 값 매개 변수를 선택적 매개 변수로 사용하여 프로 시저를 만들 수 있습니까? "나는 기본 값을 갖는,테이블 값 선택적 매개 변수

+0

내 대답을 보았습니까? 아무 피드백? –

+2

@ chuckp16은 갈 길입니다.'테이블 반환 매개 변수에는 항상 빈 테이블의 암시 적 값이 있습니다. 따라서 매개 변수없이 실제로 프로 시저를 호출 할 수는 있지만 실행될 수는 있지만 테이블은 비어 있습니다. ' – Lijo

+0

척의 답을 올바른 것으로 표시하십시오. – goodeye

답변

48

테이블 반환 매개 변수를 빈 테이블의 암시 적 값을가집니다. 따라서 매개 변수없이 실제로이 프로 시저를 호출하면 실행할 수 있지만 테이블은 비어 있습니다.

따라서 테이블 값 매개 변수에 기본값으로 레이블을 지정하는 것은 의미가 없습니다. "= null"을 제거하고 테이블 내용을 확인하십시오. 그러면 잘 수행해야합니다.

2

기본적으로 C# 닷넷과 SQL Server를 사용

나는 다음과 같은 코드를 시도 :

CREATE PROCEDURE SP 
@Table testteype = null READONLY 
AS 
.... 

을하지만이 오류 얻을 :

Operand type clash: void type is incompatible with test type 

추신 = null "은 의미가 없으며 오류의 원인입니다.

기본적으로 @Table testteype은 빈 테이블 값을 가져옵니다. 따라서, 당신은 = 널 (null)을 제거 할 수 있습니다 :

CREATE PROCEDURE SP 
@Table testteype READONLY 
AS 
.... 

참조 :이 게시물에 사용하는 C#을 ADO.NET으로이 내가하는 것이 좋습니다 것입니다 사용하는 방법에 대한 샘플 - 항상 Using SQL Server’s Table Valued Parameters

0

왜 위의 대답이 기본값 = NULL로 만드는가에 대한 이유는 확실치 않지만 이것이 저에게는 효과적입니다.

CREATE PROCEDURE SP 
(
    @Param1 VARCHAR(10), 
    @Param2 VARCHAR(10)=NULL 
) 

SELECT...... 
WHERE @Param1 = SOMETHING 
AND (@Param2 = SOMETHING OR @Param2 IS NULL) 
+1

다른 상황. 질문은 특히 * 테이블 반환 * 매개 변수에 대한 것입니다. 그들은 varchar 매개 변수와 다르게 취급됩니다. – FishBasketGordo