Sql server 2005 当子查询未引入EXISTS时,只能在选择列表中指定一个表达式

Sql server 2005 当子查询未引入EXISTS时,只能在选择列表中指定一个表达式,sql-server-2005,stored-procedures,Sql Server 2005,Stored Procedures,这是我的问题。我犯了那个错误。请帮帮我。谢谢 ASC ALTER PROCEDURE [dbo].[sp_CostAllocation_Test] @CompanyCode VARCHAR(3), @EmpCode VARCHAR(600), @PayCode VARCHAR(600) AS SELECT CTPY33PAYRP.CTPAPECOD As EmployeeCode, CTPY33PAYRP.CTPAPPCOD As paycode, (select PY11RPTFPD.r

这是我的问题。我犯了那个错误。请帮帮我。谢谢

ASC
ALTER  PROCEDURE [dbo].[sp_CostAllocation_Test]
@CompanyCode VARCHAR(3),
@EmpCode VARCHAR(600),
@PayCode VARCHAR(600)

AS
SELECT

CTPY33PAYRP.CTPAPECOD As EmployeeCode,
CTPY33PAYRP.CTPAPPCOD As paycode,
(select PY11RPTFPD.rpcol as columntotal from  PY11RPTFPD where rppcod =CTPAPPCOD) ,


(SELECT COCODE,CTPAPECOD,CTPAPPCOD
 FROM CTPY33PAYRP

WHERE CTPY33PAYRP.COCODE = @CompanyCode 
AND CTPY33PAYRP.CTPAPECOD =@EmpCode 
AND CTPY33PAYRP.COCODE = @CompanyCode
AND CTPY33PAYRP.CTPAPPCOD=@PayCode) As PayCode_Check,
PY11RPTFPD.RPPCOD As PayType,
(SELECT RPCOL,RPPCOD
        FROM  PY11RPTFPD,CTPY33PAYRP
        WHERE CTPY33PAYRP.CTPAPPCOD=PY11RPTFPD.RPPCOD)
from CTPY33PAYRP,PY11RPTFPD
ORDER BY CTPAPECOD 

我不得不说你的命名约定并不完全透明

在不知道表的模式的情况下,有点难以确定,但我猜您在使用此子查询时遇到了问题:

(SELECT COCODE,CTPAPECOD,CTPAPPCOD FROM CTPY33PAYRP
 WHERE CTPY33PAYRP.COCODE = @CompanyCode AND CTPY33PAYRP.CTPAPECOD =@EmpCode 
 AND CTPY33PAYRP.COCODE = @CompanyCodeAND CTPY33PAYRP.CTPAPPCOD=@PayCode) As PayCode_Check,
(SELECT RPCOL,RPPCOD
    FROM  PY11RPTFPD,CTPY33PAYRP
    WHERE CTPY33PAYRP.CTPAPPCOD=PY11RPTFPD.RPPCOD)
使用此子查询:

(SELECT COCODE,CTPAPECOD,CTPAPPCOD FROM CTPY33PAYRP
 WHERE CTPY33PAYRP.COCODE = @CompanyCode AND CTPY33PAYRP.CTPAPECOD =@EmpCode 
 AND CTPY33PAYRP.COCODE = @CompanyCodeAND CTPY33PAYRP.CTPAPPCOD=@PayCode) As PayCode_Check,
(SELECT RPCOL,RPPCOD
    FROM  PY11RPTFPD,CTPY33PAYRP
    WHERE CTPY33PAYRP.CTPAPPCOD=PY11RPTFPD.RPPCOD)
第一种情况是从一个表中选择多个列,第二种情况是从两个表的联接中选择多个列。两个子查询中都没有将结果限制为一行的内容。如果要在选择列表中包含子查询,则子查询必须在主查询中每行返回一行。此外,我从未见过包含多列的子查询

由于我从您的表名和列名中不知道查询要做什么,因此我无法给出多少关于如何修复语法错误的明确建议。我会说将您的子选择保持为每列一列。这就是错误消息告诉您的。此外,您还应该将子查询与主查询关联起来,以便只能使用一个值,或者在子查询中使用聚合函数,以确保主查询中的每个记录只能使用一个值

我还想说,作为旁白,您应该学习ANSI join语法。一开始似乎很棘手,但一旦你习惯了,它就是你的朋友