【问题标题】:Labview and SQL stored procedure - Procedure or function StoreTemp has too many arguments specifiedLabview 和 SQL 存储过程 - 过程或函数 StoreTemp 指定了太多参数
【发布时间】: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


【解决方案1】:

您只显示 SQL 命令的格式字符串,而不是运行此命令后生成的实际 SQL 命令。您应该首先检查它,然后按照其他人的建议直接运行相同的 SQL 命令。

没有其他信息,我唯一的直接猜测是您的浮点数有一个逗号作为小数点,但这只是基于可用信息的猜测。如果是这样的话,我希望你会意识到这一点,但你永远不会知道。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 2019-10-07
    • 1970-01-01
    相关资源
    最近更新 更多