Почему мой запрос в динамическом SQL не работает должным образом? - PullRequest
2 голосов
/ 03 июля 2019

Мне кажется, у меня проблема с форматированием в запросе, но мне нужен второй набор глаз, чтобы помочь мне, пожалуйста.

select @InsertSQL = ' Insert Into #ResultSet('
    +   'UserDomainMappingId,'
    +   'UserId,'
    +   'UserName,'
    +   'Domain,'
    +   'DomainName,'
    +   'LastUpdatedBy,'
    +   'LastUpdatedByName,'
    +   'LastUpdatedAt)'

select @SelectSQL = ' select '
    +   'UD.UserDomainMappingId,'
    +   'UD.UserId,'
    +   '(select FullName from Users where UserId = UD.UserId),'
    +   'UD.Domain,'
    +   '(select Name from ReferenceCodes RC where RC.Type = ''DOMAIN'' and RC.Code = ''' + @Domain + '''),'
    +   'UD.LastUpdatedBy,'
    +   '(select FullName from Users where UserId = UD.LastUpdatedBy),'
    +   'UD.LastUpdatedAt'                              

    select @FromSQL = ' from UserDomainMapping UD '

    select @WhereSQL = 'where UserDomainMappingId = UD.UserDomainMappingId '

Я ожидаю:

выбор для DomainNameработать, как это происходит, если я удаляю кавычки и жестко кодирую скейлер, но это не происходит внутри динамического sql.Есть идеи?Спасибо.

1 Ответ

0 голосов
/ 03 июля 2019

Объединяющая строка в SQL имеет тенденцию к NULL результату, если любое из значений равно NULL.Сделав небольшой пример, вы можете попробовать:

declare @A varchar(100), @B varchar(100), @C varchar(100)

set @A = 'a'
set @B = 'b'
set @C = @A + @B 
select @C --'ab' 

set @A = null
set @B = 'b'
set @C = @A + @B 
select @C --NULL 

set @A = 'a'
set @B = null
set @C = @A + @B 
select @C --NULL 

set @A = 'a'
set @B = null
set @C = @A + isnull(@B ,'')
select @C --'a'

Итак, в основном вы получаете пустой запрос, потому что @Domain равен NULL.Для этого предлагаю использовать isnull(@Domain,'')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...