2017-02-02 1 views
0

다른 기준으로 여러 필드를 사용하여 검색하는 앱이 있습니다. 추적의 SQL 매개 변수가 C에서 할당 된 값과 일치하지 않습니다 #

Search Bar

내 데이터 모델

내가 디버깅 할 때 그에 따라 업데이트 할 것 같다,하지만 내가 SQL 매개 변수로 전달하는 것은 내 생각은 수정되지 않습니다. SQL 추적 결과 DB에 전송되는 것이 무엇인지 보여주었습니다.

exec nu_sp_Codetable_GetWSub @address=N'1234 r%', @wo=N'%', @sub=N'%', @daysback=1096, @marketareaid=99, @po=N'%', @plan=N'%', @super=N'%', @builder=N'%'

내 질문은 (우리가 이유 때문에 기본에 대한 계수를 사용하는) 내 실제 매개 변수 값 앞에 그 "N"과 관련이있다. 그것이 코드에서 나온 것이라면 어디에서 왔는지 모르겠습니다. 이 검색을 DB에 제출하는 코드는 다음과 같습니다.

UpdateMainGrid(String.Concat(Address, "%"), "%", "%", SelectedDaysBack, SelectedMarketAreaItem.marketareaid, "%", "%", "%", "%")

나는 검색의 간단한 형태로 이것을 실행 (이 특정 검색에 대한) 코드가 하드 각 매개 변수에 대한 코딩하는 기본 계수를 가지고 위치를 알 수 있습니다. 이 예제에서는 Address 변수 만 실제로 설정된 값입니다.

몇 가지 메모, 위에 표시된 업데이트 방법은 우리가 SQL에 연결하는 데 사용하는 클래스에 리터럴 문자열을 전달하므로이 코드를 제공하지 않았습니다. 디버깅은이 단계에서 데이터가 변경되지 않는다는 것을 보여 주며 SQL 추적에서 다르게 나타납니다. 또한 추적에서 찾은 다른 쿼리에는 'N'이 포함되지 않습니다. 어떤 차이가 있는지 나는 모른다.

+0

'N'은 값이 VARCHAR 대신 NVARCHAR로 취급된다는 것을 의미합니다. – Crowcoder

+0

고맙습니다. 그 대답은 간단합니다. 나는 google에서 실패한다 ... – Jon

답변

2

N은 유니 코드 문자열을 나타 내기 위해 SQL에서 사용됩니다.

자국어 문자 집합을 나타냅니다. 당신은 C#에서이 작업을 수행 할 수 있습니다 많은처럼

:

decimal d = 0.3m;

끝에 여분 m는 실제 값을 변경하지 않고, 그냥 좀 더 명시 적 표현이다.

+0

그래서 SQL 실행 문에는 아무런 의미가 없다. 나는 지나치게 단순화 할 수 있지만 varchar와 nvarchar는 본질적으로 다르지만이 경우 다른 동작을하지는 않습니까? 수동으로 트레이스에서 실행을 푸시하고 같은 결과가 나오지 않습니다. 필자는 SQL 쿼리를 분석하여 왜 작동하지 않는지 알아보기 전에이를 확실히 알고 싶습니다. – Jon

+0

nvarchar를 전달할 때 특히 인덱스를 사용하면 차이가 발생할 수 있지만 인덱스가있는 열은 varchar이므로 인덱스를 사용하지 않고 비교를 위해 열을 nvarchar로 변환합니다. –

+0

테스트 할 때 매개 변수로 '%'만 포함하는 것이 잘못 되었습니까, 아니면 exec에 그대로 'N'을 넣어야합니까? 또한 exec의 표기법과 일치하도록 스크립트에서 매개 변수 데이터 형식을 nvarchar로 변경하는 것이 적절합니까? 나는이 'N'표기법의 사용이나 기능을 실제로 얻지는 못했고 SQL 쿼리를 분석하는 동안 그것이 왜 효과가 없는지를 알아낼 것입니다. – Jon

0

기본적으로 매개 변수는 SQL에 nvarchar로 보내집니다. 이는 매개 변수에 대해 가능한 가장 넓은 값을 허용하고 서 v의 C 럼을 기]으로 유형을 변환하도록 처리하기 위해 수행됩니다. 단순히 문자열을 varchar이 아닌 Nvarchar으로 정의합니다.

관련 문제