sql select 在函数中变成 select

sql select into select in function

当我尝试更改下面的函数时,我收到以下错误消息:

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

我猜大概是因为select变成了select。但是为什么这个 select 到 select 单独工作(不在函数中)而不是在函数中。

ALTER FUNCTION [dbo].[Getcurrentexchangerate] (@CurrencyFromId INT, 
                                               @CurrencyToId   INT) 
returns DECIMAL(13, 10) 
AS 
  BEGIN 
      DECLARE @rate DECIMAL (13, 10) 
      DECLARE @dw INT 

      SET @dw = (SELECT Datepart(dw, Getdate())) 

      IF( @dw != 2 ) -- Monday       
        BEGIN 
            SET @rate = (SELECT TOP (1) [rate] 
                         FROM   currencyconversionrate 
                         WHERE  [currencyfromid] = @CurrencyFromId 
                                AND [currencytoid] = @CurrencyToId 
                         ORDER  BY id DESC) 
        END 
      ELSE 
        BEGIN 
            SET @rate = (SELECT * 
                         FROM   (SELECT TOP(2) Row_number() 
                                                 OVER ( 
                                                   ORDER BY id DESC) AS 
                                               rownumber, 
                                               rate 
                                 FROM   currencyconversionrate 
                                 WHERE  ( [currencyfromid] = 2 
                                          AND [currencytoid] = 5 ) 
                                 ORDER  BY id DESC) AS Rate 
                         WHERE  rownumber = 2) 
        END 

      IF( @rate IS NULL ) 
        BEGIN 
            SET @rate = 1 
        END 

      RETURN @rate 
  END 

查看您的 "else" 部分

 SET @rate = (SELECT * 
                         FROM   (SELECT TOP(2) Row_number() 
                                                 OVER ( 
                                                   ORDER BY id DESC) AS 
                                               rownumber, 
                                               rate 
                                 FROM   currencyconversionrate 
                                 WHERE  ( [currencyfromid] = 2 
                                          AND [currencytoid] = 5 ) 
                                 ORDER  BY id DESC) AS Rate 
                         WHERE  rownumber = 2) 

您正在尝试 select 来自 currencyconversionrate table 的所有字段,您不能这样做,或者您只想 select "RATE" 列?

尝试更改为以下内容:

 SET @rate = (SELECT rate
                         FROM   (SELECT TOP(1) Row_number() 
                                                 OVER ( 
                                                   ORDER BY id DESC) AS 
                                               rownumber, 
                                               rate 
                                 FROM   currencyconversionrate 
                                 WHERE  ( [currencyfromid] = 2 
                                          AND [currencytoid] = 5 ) 
                                 ORDER  BY id DESC) AS Rate 
                         WHERE  rownumber = 2)