【发布时间】:2020-04-16 19:35:00
【问题描述】:
我有一个如下所示的存储过程:
CREATE PROCEDURE [dbo].[StoreTemp]
(@Temperature float,
@Seconds int,
@SessionId int,)
AS
BEGIN
DECLARE @Unit varchar(20);
SELECT @Unit = RecordingUnit FROM ReadLastUnit;
INSERT INTO DATASET (Temperature_C, Temperature_F, Seconds, SessionId, [Time])
SELECT
CASE WHEN @Unit = 'Celsius' THEN @Temperature ELSE NULL END,
CASE WHEN @Unit != 'Celsius' THEN @Temperature ELSE NULL END,
@Seconds, @SessionId, GETDATE();
END
在 labview 中,我准备了带有
等参数的字符串execute StoreTemp %2.1f, %d, %d
它采用 3 个参数,这些参数通过“格式化为字符串”框输入。
抛出以下错误:
错误 -2147217900 发生在 Microsoft OLE DB Provider for ODBC Drivers 中发生异常:
[Microsoft][ODBC SQL Server Driver][SQL Server]过程或函数 StoreTemp 指定的参数过多。在 ADODBCommand 中
上面的 SQL Server 存储过程基本上应该从 LabView 获取一个测量值@Temperature,并根据记录设置(从 ReadLastUnit View 读取为@Unit)将温度存储在一个单位中并填充其他为空的单位列,反之亦然。尽管指定了 3 个输入并且通过 LabView 传递了 3 个参数,但它似乎以某种方式获得了更多参数。那么这个错误是什么意思呢?
【问题讨论】:
-
你有一个额外的逗号
@SessionId int,还是打错了?除非您只有一行,否则SELECT @Unit = RecordingUnit from ReadLastUnit;将无法按预期工作。 -
那个逗号是错字。是的,@ReadLastUnit 仅返回 1 行,即该列的最后输入值
-
我对实验室视图一无所知,但看起来您将 4 个参数传递给定义为接受三个的存储过程。你有
%2.1f,然后是%d的三个实例 -
也更新了那部分,它应该是一个浮点数 %2.1f 和两个数字 (int) %d。所以我将这 3 个值传递给需要传递 3 个参数的存储过程,其中浮点数用于填充插入函数中的两列。很难理解问题是什么。已经尝试使用 SQL 查询进行一些手动插入,并且存储过程似乎可以工作,所以我想它必须来自 LabView 方面
-
您是否尝试在 SQL 中执行 SQL,以便您知道它已正确编写。您的通话中没有括号? w3schools.com/sql/sql_stored_procedures.asp
标签: sql sql-server labview