Sybase“具有多个SET的主机变量值不足”

时间:2014-03-04 08:19:56

标签: c# odbc sybase sqlanywhere

当执行具有多个用于设置局部变量的参数的查询时,我收到此错误:

  

iAnywhere.Data.SQLAnywhere.SAException(0x80004005):主机变量值不够

我使用OdbcConnection或SAConnection获得相同的错误。

var connection = new SAConnection(connectionString);
connection.Open();
var transaction = connection.BeginTransaction();

string sql = @"
DECLARE @A int
DECLARE @B int
SET @A = ?
SET @B = ?
";

var command = new SACommand(sql, connection, transaction);

var param1 = new SAParameter();
param1.Value = 1;
command.Parameters.Add(param1);

var param2 = new SAParameter();
param2.Value = 2;
command.Parameters.Add(param2);

command.ExecuteNonQuery();

如果只有一个参数,则查询执行正常:

DECLARE @A int
DECLARE @B int
SET @A = ?
SET @B = 42

我在Sybase Anywhere 12.0.1.3942服务器上运行它。

更新:经过更多测试后,我发现当我在同一个查询中有多个参数化语句时会发生这种情况。这也给出了错误:

SELECT ?
SELECT ?

1 个答案:

答案 0 :(得分:5)

SA数据库引擎中显然有some obnoxious restrictions

  

批量内允许主机变量引用具有以下限制:

     
      
  • 批次中只有一个语句可以引用主变量
  •   
  • 使用主机变量的语句前面不能有返回结果集的语句
  •   

一种可能的解决方法是一个声明中选择将所有主变量(参数) 转换为本地变量使用它们:

BEGIN
    DECLARE @id INT;
    DECLARE @name NVARCHAR;
    DECLARE @comment NCARCHAR;
    SELECT :id, :name, :comment INTO @id, @name, @comment;
END;