2009-09-15 3 views
0

나는이 거대한 저장 프로 시저를 어디서 SQL 문을 만들지를 알고있다. 마지막으로 다음과 같은 매개 변수 목록을 만듭니다.저장 프로 시저에서 sp_executesql을 사용하는 올바른 방법입니까?

DOES @paramList 필요와 앞에 N?

SELECT @paramList = '@param1 nvarchar(300), 
       @param2 nvarchar(10), 
      @param3 nvarchar(10), 
      @param4 nvarchar(100), 
      @param5 nvarchar(1000), 
      @param6 nvarchar(1000), 
      @param7 nvarchar(200), 
      @param8 nvarchar(2000)’ 
이 같은

그때 호출하고 sp_executesql을 :

이 paramList 내 매개 변수 목록 및
EXEC sp_executesql @sql, @paramList, 
    @param1,@param2,@param3,@param4, 
      @param5,@param6,@param7,@param8 
@Sql는 문이

모든 다른 변수는 내가 저장된 상단에 선언 된 매개 변수입니다 순서. 이것을 올바른 방법일까요?

+1

실행 되나요? 그렇다면, 당신은 그것을 얻었습니다! 여기에 오류 메시지를주지 않으면. –

+0

paramList의 끝 부분에 둥근 따옴표가있는 것처럼 보이지만 사용중인 도구의 인공물 일 수 있습니다. –

+0

실행됩니다. 그래, 그게 하나의 qoute로되어 있지만 이상하게 보였다. 나는 형식을 정하기 위해 단어를 사용하고있었습니다. 내가 올바른지 물어 본 이유는 추적을 실행할 때 sp_executesql을 말하는 것을 볼 수 없기 때문입니다. EXEC – Xaisoft

답변

1

문자열이 데이터베이스 데이터 정렬 외부의 문자를 사용하지 않으면 N "표기는 필요하지 않습니다.

@paramList 선언을 진술하지 않았습니다. N ''은 NVARCHAR로 선언 된 경우에만 유용합니다.

SQL 서버는 자동으로 VARCHAR과 NVARCHAR 값 사이의 변환을 처리합니다 (다시 db 데이터 정렬과 관련됨).

따라서 귀하의 경우 솔루션이 작동합니다. "올바른"방법은 NVARCHAR 및 N "을 사용하는 것이지만이 경우에는 필요하지 않습니다.

1

네, 맞습니다. '@param1 nvarchar(300), ..., @param8 nvarchar(2000)'sp_executesql에 dirrectly 전달할 수 있으므로 @paramList를 통해 전달할 필요가 없습니다. 또한 sp_executesql의 두 번째 인수는 유니 코드 형식이므로 추가 ASCII 대 유니 코드 대화를 수행하는 것이 좋습니다. 당신은 바로 할 수 그래서 단단히 전달 된 실제 매개 변수와 결합되어 있기 때문에

EXEC sp_executesql @sql, 
    N'@param1 nvarchar(300),...,@param8 nvarchar(2000)', 
    @param1,...,@param8; 

는 통화 자체에 매개 변수 목록 선언을 유지하기 위해 더 나은입니다.

+0

@paramList로 전달했습니다. Microsoft에서 예제를 설정했기 때문입니다. – Xaisoft

+0

충분합니다. 그러나 MSDN의 예에서'@ ParmDefinition'은''... ''이 아니라'N '...' '입니다 (즉, 유니 코드). –

+0

@paramList를 전달하면 @paramList 앞에 N을 써야합니까? @paramList = N '@ param1 nvarchar (100), @ param2 nvarchar (50)' – Xaisoft

관련 문제