【问题标题】:This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression inSQL当子查询跟随 =、!=、<、<=、>、>= 或当子查询用作 SQL 中的表达式时,这是不允许的
【发布时间】:2019-02-09 09:45:16
【问题描述】:

需要子查询的计数

--DM 之前到达,但在过去的 60 天内未再次到达 - VIP

SET @MainQuery = 'SET @DMNotReachedAgainForLastSixtyDaysVIP = (SELECT COUNT(DISTINCT SMSCH.Cgvak_Comh_Icode) 
FROM Cgvak_Sms_Company_Header SMSCH 
JOIN Cgvak_Sms_Company_Detail SMSCD ON SMSCD.Cgvak_Comd_Comh_Icode = SMSCH.Cgvak_Comh_Icode 
JOIN [dbo].[Cgvak_Sms_User_Master] SMSUM ON SMSUM.Cgvak_User_Icode = SMSCH.Cgvak_Comh_AssignBDE_Icode
WHERE (SMSCD.Cgvak_Comd_Call_date >= DATEADD(DAY, -60, GETDATE())) AND SMSCD.Cgvak_Comd_SpoketoStatus = ''N''  AND ' + RTRIM(@DynamicQuery) + ' 
AND SMSCD.Cgvak_Comd_Comh_Icode IN (SELECT DISTINCT CSCH.Cgvak_Comh_Icode FROM Cgvak_Sms_Company_Header CSCH 
JOIN Cgvak_Sms_Company_Detail CSCD ON CSCD.Cgvak_Comd_Comh_Icode = CSCH.Cgvak_Comh_Icode 
WHERE  CSCH.Cgvak_Comh_VIPAC = ''Y'' AND CSCD.Cgvak_Comd_Call_date <= DATEADD(DAY, -60, GETDATE()) 
AND CSCH.Cgvak_Comh_DMSpokeStatus = 1 AND CSCH.Cgvak_Comh_Icode = CSCD.Cgvak_Comd_Comh_Icode))

EXECUTE sp_executesql @MainQuery , N'@DMNotReachedAgainForLastSixtyDaysVIP BIGINT OUTPUT', @DMNotReachedAgainForLastSixtyDaysVIP = @DMNotReachedAgainForLastSixtyDaysVIP OUTPUT

我正在将动态查询从前端传递到此 SP。但它显示,子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。

【问题讨论】:

  • 请在提出问题时表现出一些努力,请格式化并给出一些解释
  • 对不起兄弟,新手。请立即查看
  • @DynamicQuery 中有什么内容?调试动态 sql 最简单的方法是打印查询而不是执行它,然后您就可以看到它了。

标签: tsql stored-procedures dynamic-sql


【解决方案1】:

我在您发布的代码中没有发现任何问题。问题一定出在RTRIM(@DynamicQuery)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多