当我使用参数正常运行查询时,查询工作正常。但是一旦我将其设为动态,就会导致错误。
我对SQL Server很陌生。 当我打印查询并运行它时,它工作正常。但是,当动态运行时,会导致“子查询返回的值超过1个”错误。
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返回的所有结果
答案 0 :(得分:0)
第一个查询表达式中没有子查询。
导致第二个。表达式中是做什么的?
select * from #tempFilteredData where Mkt_TerritoryId IN ( '+(SELECT [MktTerritoryName] FROM @MktTerritoryNames)+' )'
我什至不知道这应该在做什么。也许您想在创建临时表后 运行它。而且,它不必是动态的,只需:
select *
from #tempFilteredData
where Mkt_TerritoryId IN (SELECT [MktTerritoryName] FROM @MktTerritoryNames);