2014-04-28 2 views
1

를 설정할 때 레코드를 반환 나는 다음과 같은 매개 변수 ('5', 'TH'와 그것을 실행할 때 나는 다음과 같은 절차SQL Server는 어떤 결과를 반환하지만, 명시 적으로

CREATE PROCEDURE [dbo].[Q2_05] (@Ch1 nvarchar, @Ch4 nvarchar, @globalOptionCode nvarchar) 

AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT [2_05].Ch1, [2_05].Ch4, [2_05].GlobalOption, [2_05].Part, [2_05].[Key] 
    FROM [dbo.NV300Autostructure].[2_05] 
    WHERE ((([2_05].Ch1)[email protected]) AND (([2_05].Ch4)[email protected]) AND (([2_05].GlobalOption)[email protected])); 
END 

에 문제가있어 '.')는 검색 결과를 리턴하지 않지만 제거 과정에서 I는 상태 라인을 수정 및하면과 같이 명시 적으로 'TH'내지 [2_05] .Ch4 설정할 것을 발견은 행을 반환

WHERE ((([2_05].Ch1)[email protected]) AND (([2_05].Ch4)='TH') AND (([2_05].GlobalOption)[email protected])); 

을 데이터베이스 왜 그런 일이 일어나는거야?

+2

아마 읽을 가치가있다 : [나쁜 습관 : (길이)없이 VARCHAR 선언] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick- declaring-varchar-without-length.aspx) – GarethD

+0

@GarethD 매개 변수를 얼마나 오래 사용할 것인지 잘 모르겠 으면이 유형의 쿼리를 계속 사용할 수 있습니까 (이 경우 길이는 1-3 문자 일 수 있습니다)? – kacpr

+1

만약 당신이 이것을 모르는 것이라면, 가능한 최대치를 얼마나 오래 사용할 지 모른다면'NVARCHAR (MAX)'를 사용하십시오. – GarethD

답변

3

nvarchar 매개 변수의 크기를 지정하지 않았습니다. 기본값은 1 자입니다.

따라서 매개 변수를 사용할 때 프로 시저가 [2_05].Ch4)='T'에 대한 테스트입니다.

+0

나는 그것이 필요하다는 것을 몰랐다. SQL SMS 내에서 어떻게 수행합니까? (프로 시저 -> 실행을 마우스 오른쪽 단추로 클릭하십시오)? 또한 Java를 사용하여이 데이터베이스에 액세스하고 호출 문을 사용하여 프로 시저를 호출합니다 (예 : ). (변수 dbo.Q2_05 (?,?,?))을 호출하면 사용할 수있는 방법이 있습니다. 그들에게 전화하는 동일한 방법? – kacpr

+2

저장 프로 시저를 호출 할 때 아무 것도 변경할 필요가 없습니다. 프로 시저 자체를 업데이트해야합니다. create procedure xx @Param nvarchar (** 50 **) .... –

+0

@kacpr 저장 프로 시저의 매개 변수 크기를 비교 대상 열과 동일하게 선언해야합니다 ('[2_05]). Ch4'). –