Sql server 错误:为变量赋值的SELECT语句不能与数据检索操作结合使用

Sql server 错误:为变量赋值的SELECT语句不能与数据检索操作结合使用,sql-server,Sql Server,运行以下查询时,出现了一个错误,说明: 不能使用为变量赋值的SELECT语句 与数据检索操作相结合 我该如何解决这个问题 以下是查询: DECLARE @loanInstallmet float SELECT TOP (1) loan.loanID,members.offno AS OfficialNumber, loan.loanAmount, loan.interestRate, loan.NoOfInstallment, loanHistory.

运行以下查询时,出现了一个错误,说明:

不能使用为变量赋值的SELECT语句 与数据检索操作相结合

我该如何解决这个问题

以下是查询:

DECLARE @loanInstallmet float

SELECT TOP (1) 
    loan.loanID,members.offno AS OfficialNumber,
    loan.loanAmount,
    loan.interestRate,
    loan.NoOfInstallment,
    loanHistory.presentInstallmentNo,
    loanHistory.dateBalanceUpdate,
    (loanHistory.presentInstallmentNo + 1) AS InstallmentNo, 
    members.monthllyContribution AS MonthlyContribution, 
    @loanInstallmet = 
        CASE 
            WHEN  loan.remarks = 'Half' THEN ROUND(loanHistory.balanceAmount/ (loan.NoOfInstallment-loanHistory.presentInstallmentNo ), 0) 
            ELSE ROUND((loan.loanAmount / loan.NoOfInstallment), 0)
        END, 
    CASE 
        WHEN  loanHistory.presentInstallmentNo % 12 = 0 THEN ROUND(((loan.loanAmount-loanHistory.balanceAmount) * loan.interestRate / 1200), 0)
        ELSE ROUND((loan.loanAmount * loan.interestRate / 1200), 0)
    END AS MonthlyInterest, 
    LEFT(DATENAME(MONTH,Getdate()),3)as recMonth,
    year(GETDATE())as recYear,
    loan.isRecovered as LoanIsRecovered,
    members.memberIsActive,
    loanHistory.status,
    ROUND((loanHistory.balanceAmount-@loanInstallmet), 0) AS BalanceAmount,
    loan.remarks
FROM loan
INNER JOIN members 
    ON loan.offNo = members.offno
INNER JOIN loanHistory 
    ON members.offno = loanHistory.offNo
    AND loan.loanID = loanHistory.loanID
WHERE 
    loan.isRecovered = 0
    AND members.memberIsActive = 1  
order by loanHistory.presentInstallmentNo DESC

它在说它的意思

你不能这样做:

选择前1名loan.loanID、members.offno作为官方编号

同时:

选择@loanInstallmet=CASE WHEN loan.comments='Half',然后

您正在为应用程序检索数据,或者正在设置变量的值。同时做这两件事是不合逻辑的

如果要计算@loanInstallmet并在将来的计算中使用它,可以执行以下操作:

With tblLoanInstallCalc as (
SELECT     TOP (1) loan.loanID,members.offno AS OfficialNumber,loan.loanAmount,loan.interestRate,loan.NoOfInstallment,loanHistory.presentInstallmentNo,loanHistory.dateBalanceUpdate,(loanHistory.presentInstallmentNo + 1) AS InstallmentNo, members.monthllyContribution AS MonthlyContribution, 
    CASE WHEN  loan.remarks = 'Half' THEN ROUND(loanHistory.balanceAmount/ (loan.NoOfInstallment-loanHistory.presentInstallmentNo ), 0)  ELSE ROUND((loan.loanAmount / loan.NoOfInstallment), 0) END AS loanInstallmet, 
    CASE WHEN  loanHistory.presentInstallmentNo%12 = 0 THEN ROUND(((loan.loanAmount-loanHistory.balanceAmount) * loan.interestRate / 1200), 0) ELSE ROUND((loan.loanAmount * loan.interestRate / 1200), 0) END AS MonthlyInterest, 
    LEFT(DATENAME(MONTH,Getdate()),3)as recMonth,year(GETDATE())as recYear ,loan.isRecovered as LoanIsRecovered, members.memberIsActive, loanHistory.status, loan.remarks
    FROM         loan INNER JOIN
                          members ON loan.offNo = members.offno INNER JOIN
                          loanHistory ON members.offno = loanHistory.offNo AND loan.loanID = loanHistory.loanID
    WHERE     (loan.isRecovered = 0) AND (members.memberIsActive = 1)  
)
Select *, ROUND((balanceAmount-loanInstallmet), 0) AS BalanceAmount
From tblLoanInstallCalc 

TBLLOANISTALLCALC是一个常见的表表达式CTE,在您尝试累计余额之前,它正在预计算先决条件

如何将此输出插入到另一个表中?您可以将select语句select ROUNDbalanceAmount loanInstallmet,0更改为insert语句,同时仍从TBLLOANISTALLCALIC插入如果我想同时执行这两项操作,为变量赋值并将数据返回给用户,我可以用一条select语句来完成吗,或者我必须重复同一条select语句两次?我想在回答之前我必须问的问题是,在将数据返回给用户之前,您打算如何处理变量中的值?