首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在where子句中使用' in‘返回子查询返回多个值

在where子句中使用' in‘返回子查询返回多个值
EN

Stack Overflow用户
提问于 2019-07-14 20:28:50
回答 1查看 68关注 0票数 0

当我使用params正常运行时,查询运行正常。但是,一旦我将其动态化,它就会导致错误。

我对SQL server还是个新手。当我打印并运行查询时,它工作得很好。但当动态运行时,它会导致‘子查询返回多于1个值’错误。

代码语言:javascript
复制
declare @query nvarchar(max) =  'Select * 
                    into #tempFilteredData              
                    from 
                    (
                    SELECT td.UserId AS [EmployeeID],w.NAME AS [EmployeeName],at.ActivityCode AS [ActivityType],td.TargetAssigned,td.Mkt_TerritoryId,
                    wd.WeekName + ''('' + CONCAT((RTRIM(CONVERT(CHAR(3),DATENAME(day, wd.WeekStartDate),0))), ''-'', CONVERT(CHAR(3),DATENAME(month, wd.WeekStartDate),0),''To'',
                    (RTRIM(CONVERT(CHAR(3),DATENAME(day, wd.WeekEndDate),0))), ''-'', CONVERT(CHAR(3),DATENAME(month, wd.WeekEndDate),0)) + '')'' AS weekName
                    FROM tblTargetDetails td
                    INNER JOIN FMC_CMaster..Worker w ON td.UserId = w.[Personnel Number]
                    INNER JOIN FMC_CMaster..[vwAuthenticateUser] vw ON vw.UserId = td.UserId and vw.Blocked=''No'' and vw.Closed=''No'' AND vw.AssetCode = ''MPH''
                    INNER JOIN tblActivityType at ON at.ActivityTypeId = td.ActivityTypeId
                    INNER JOIN WeekDetails wd ON wd.WeekId = td.WeekId
                    LEFT JOIN FMC_CMaster..Marketing_Hierarchy_AMM_Level mrktHAL ON w.[Personnel Number] = mrktHAL.TMH_Code 
                    WHERE td.CreatedBy =  ''' + @LoggedInUserId + '''  
                    AND mrktHAL.TMH_Code = ''' + @TMHCode + '''  

                    ) as p 
                    pivot(
                    MAX([TargetAssigned]) for [WeekName] in ('+RTRIM(LTRIM(@columnName))+')
                    ) as pvt

                    select * from #tempFilteredData where Mkt_TerritoryId IN ( '+(SELECT [MktTerritoryName] FROM @MktTerritoryNames)+' )'
        PRINT (@query)
        exec (@query)

我想在我的临时表#tempFilteredData中搜索@MktTerritoryNames返回的所有结果

EN

回答 1

Stack Overflow用户

发布于 2019-07-14 20:32:09

第一个查询表达式中没有子查询。

这就导致了第二个问题。这在表达式中是做什么的?

代码语言:javascript
复制
select * from #tempFilteredData where Mkt_TerritoryId IN ( '+(SELECT [MktTerritoryName] FROM @MktTerritoryNames)+' )'

我甚至不明白这是怎么回事。也许您想在创建临时表之后运行它。而且,它不需要是动态的,只需要:

代码语言:javascript
复制
select *
from #tempFilteredData
where Mkt_TerritoryId IN (SELECT [MktTerritoryName] FROM @MktTerritoryNames);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57027429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档