还记得sql中变量的声明吗?

本文关键字:声明 变量 sql 还记得 | 更新日期: 2023-09-27 18:06:59

我从c#代码调用SQL查询。我如何保持变量的声明,我已经在SQL中声明?下面是我的代码:

    SqlConnection connection = new SqlConnection(conString);
    connection.Open();
    string s = @"
                declare @ttt int
                set @ttt = 6
                select @ttt";
    SqlCommand cmd = new SqlCommand(s, connection);
    int retVal = (int)cmd.ExecuteScalar();
    s = @"select @ttt";
    cmd.CommandText = s;
    retVal = (int)cmd.ExecuteScalar();
    connection.Close();

第二个ExecuteScalar()的错误是:必须声明标量变量"@ttt"。(我必须将其拆分为多个查询,因为我在c#代码中进行计算等。

还记得sql中变量的声明吗?

这个问题是c#代码中连接和SQL查询的范围。

变量只在当前命令的作用域中。

如果你在第一次查询中返回@ttt的值,那么也许在第二次查询中你可以再次声明该变量,然后将该变量设置为第一次查询返回的值。

变量是"批处理"作用域。每个命令执行等同于(至少)一个批处理,因此在第一个批处理中声明的变量在第二个批处理中都不可见。

解决这个问题的唯一方法是将两个SQL块合并到一个批处理中,或者在所有批处理中重新声明和分配变量。

查看文档获取更多信息

从第一个命令中,@ttt中的值将在retVal中。当您已经拥有该值时,为什么还需要执行另一个查询?