为什么我在动态 SQL 中的查询不能按预期工作?
Why won't my query in a dynamic SQL work as intended?
我认为我在查询中遇到了格式问题,但我需要另一双眼睛来帮助我。
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 '
我期待:
域名的 select 可以正常工作,就像我删除引号并对缩放器进行硬编码一样,但它不在动态 sql 中。有任何想法吗?谢谢
如果任何值是 NULL
,则 SQL 中的连接字符串倾向于 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,'')
我认为我在查询中遇到了格式问题,但我需要另一双眼睛来帮助我。
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 '
我期待:
域名的 select 可以正常工作,就像我删除引号并对缩放器进行硬编码一样,但它不在动态 sql 中。有任何想法吗?谢谢
如果任何值是 NULL
,则 SQL 中的连接字符串倾向于 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,'')