我正在使用一個存儲過程,在該存儲過程中,我發送的數據庫中的類型爲float
,並且我還聲明參數float
,該數據庫的類型爲@columnname
。
當我通過列名作爲浮動則給出了錯誤:如何將字段名稱作爲參數傳遞到存儲過程
Msg 8114, error converting data type nvarchar to float.
這是我的測試查詢
Declare @column float
set @column = 'S_E1'
select Avg(@column) from TBL_SENSORS
而且當我改變參數類型varchar
然後它給了我這個錯誤:
Msg 8117, Operand data type varchar is invalid for avg operator.
Declare @column varchar
set @column = 'S_E1'
select Avg(@column) from TBL_SENSORS
我該如何解決這個問題?
UPDATE:
這是我的存儲過程:
ALTER PROCEDURE [dbo].[getAvgColumn]
@ColumnName float,
@StartDate DateTime,
@EndDate DateTime,
@Start int,
@End int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
declare @Skip int = 0
declare @Take int = 4
declare @count int = 0
set @count = (select count(@ColumnName) from TBL_SENSORS Where RECORD_TIMESTAMP Between @StartDate and @EndDate And (@ColumnName Between @Start And @End))
while(@Skip < @count)
Begin
select avg(@ColumnName)
from
(select
@ColumnName as cc,
row_number() over (order by RECORD_TIMESTAMP) as rn
from
TBL_SENSORS
Where
RECORD_TIMESTAMP Between @StartDate and @EndDate
And (@ColumnName Between @Start And @End)
) T
where
rn > @Skip and
rn <= @Skip + @Take
set @Skip = @Skip + @Take
end
END
如何取一個字符串的平均值? – keyser
[Column-name和/或表名作爲參數]的可能重複(http://stackoverflow.com/questions/5791764/column-name-and-or-table-name-as-parameters) – GSerg
您是否正在嘗試返回一個字段的平均值作爲參數傳遞給你的名字? – Quassnoi