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)
当我尝试更改下面的函数时,我收到以下错误消息:
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)