当执行具有多个用于设置局部变量的参数的查询时,我收到此错误:
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 ?
答案 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;