2017-01-11 2 views
1

을 비우 왜 나는 동적 SQL에 문제가 있습니다 (예 하나))동적 SQL - 변수 숙박이

이 같은 지역 변수 선언

내부 저장 프로 시저 :

DECLARE이 NVARCHAR을 @cmd을 (최대) 나중에 코드에서 내가 입력의 많은이 줄을 가지고하는 것은 (엉망이 조직에 성공하지 못했습니다 죄송) 내 SP가 받았다 매개 변수 : 나는 그것을 디버깅 후

SET @cmd = 'INSERT INTO dbo.' + @ArchiveTableName + '(' + @ArchiveFieldsName + ',' + @ArchiveEntityMainIdentifierField + ') 
    SELECT ' + @EntityFieldsName + ',' + '' + @EntityMainIdentifierField + '' + 
     ' FROM [' + @OrganizationName + '].[dbo].[' + @EntityName + '] ent 
     left join dbo.' + @ArchiveTableName + ' arc on arc.' + @ArchiveEntityMainIdentifierField + ' = ent.' + @EntityMainIdentifierField + ' 
     where ent.' + @EntityMainIdentifierField + ' = ''' + @ParentId + ''' and arc.' + @ArchiveEntityMainIdentifierField + ' is null' 

, 나는 이상한 뭔가를 발견했다. 이 @cmd를 실행하면 빈 상태가 유지됩니다.

아무에게도 이것이 일어날 수있는 이유에 대한 단서를 제공 할 수 있습니까?

+3

만약 하나의 변수가 NULL이라면 전체 문자열은 NULL이 될 것입니다. –

+0

오, 알지 못합니다. –

+0

옙 그게, 고마워요! –

답변

5

다른 변수 중 하나가 NULL 일 수 있습니다. 'Something' + NULL = NULL. CONCAT (SQL Server 2012 이상)을 사용하면 NULL이 빈 문자열로 바뀝니다. COALESCE (sql server 2008+)을 사용하는 것이 더 좋으며 (필수 변수가 NULL이 아닌지 확인하십시오).