보인다.
Select *
from table as tbla
where tbla.Id='''[email protected]+ ''' **SOMETHING_MISSING_HERE**
(Case when @Input2 is not null then tbla.supid='''[email protected]+ ''' else '''' end)
당신이 케이스를 사용하는 경우, 당신은 케이스의 THEN 부분에 무엇이되는 경우의 "반환"(말하자면) 요소가 필요합니다 - 뭔가 비교를. @ 입력 2 null가 아닌 경우, @ 입력 2가 null의 경우 tbla.Id = @Input1
및 supid = @Input2
또는 supid = ''
공지 사항 supid =
의 배치 귀하의 예제에 비해 있다는 것을 것을
'Select *
from table as tbla
where tbla.Id='''[email protected]+ '''
AND tbla.supid=
(Case when ''' + @Input2 + ''' is not null then '''[email protected]+ ''' else '''' end)'
이 확인됩니다 그래서 예를 들면
.
당신이 필요한 라인에 뭔가가 있습니까? 하고 있는지 - 당신은 ISNULL 사용하여 문을 단순화 할 수 있습니다 : 단지 문제를 좀 더 복잡하게,
'Select * from table as tbla
where tbla.Id='''[email protected]+ ''' AND tbla.supid= ISNULL(''' + @Input2 + ''' , '')'
그러나을; 그때 당신은 동적 SQL을위한 문자열에 NULL을 추가하려고하는 NULL 문제에 빠지게되고 NULL을 추가하면 NULL이됩니다. 당신은 그래서 때 : 변수가 설정 한 후
가
DECLARE @Input2 VARCHAR(100)
다음, 당신이 확인해야 그래서 당신의 예에서 NULL을 확인하는 가장 좋은 장소는 쿼리하기 전에 @ 입력 2 변수를 확인하는 것입니다 NULL 동적 SQL 문에서 사용하기 전에 : 다음
SET @Input2 = ISNULL(@Input2, '')
그리고 동적 SQL 문에서 변수를 사용합니다.
매개 변수가 null이 아닌 경우 다음과 같이 포함하고 싶으면 where 절에 포함 시키십시오. Pls 내 편집 된 쿼리를 참조하십시오. – DonMax
그런 다음'AND tbla.supId = ISNULL (@ Input2, tlba.supId)' 과 같은 것을 실행하면 동적 SQL 문자열을 실행할 필요가 없습니다. 그것이 null 인 경우 supId는 다른 경우 항상 true 인 supId와 일치합니다.이 경우는 Input2와 비교됩니다. –
내게 적합하지 않습니다. '테이블에서 선택 * tbla 여기서 tbla.Id='''++Input1+' ''AND tbla.supid = ISNULL ('' '+ @ Input2 +' '', tbla.supid) ''. – DonMax