Помните объявление переменных в sql - PullRequest
1 голос
/ 30 августа 2011

Я вызываю SQL-запросы из кода C #.Как я могу сохранить объявление переменных, которые я уже объявил в 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 #.

Ответы [ 3 ]

1 голос
/ 31 августа 2011

Переменные находятся только в области действия текущей команды.

Если вы возвращаете значение @ttt в первом запросе, то, возможно, во втором запросе вы можете объявить эту переменную снова, а затем установить для этой переменной значениезначение, которое было возвращено из первого запроса.

1 голос
/ 30 августа 2011

Переменные имеют объемную область. Каждое выполнение команды соответствует (как минимум) одному пакету, поэтому ни одна из переменных, объявленных в первом пакете, не будет видна во втором пакете.

Единственный способ решить эту проблему - объединить два фрагмента SQL вместе в один пакет или переопределить и назначить переменные во всех пакетах.

Подробнее см. В документации .

0 голосов
/ 31 августа 2011

Из первой команды значение, которое было в @ttt, будет затем в retVal. Зачем вам нужно делать еще один запрос, если у вас уже есть значение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...