Как объединить присвоение переменной с операциями извлечения данных в T-SQL
-
04-07-2019 - |
Вопрос
Просто для пояснения, я использую Sybase 12.5.3, но я уверен, что это справедливо и для SQL Server 2005. По сути, я пытаюсь написать запрос, который выглядит примерно так, я максимально упростил его, чтобы осветить проблему:
DECLARE @a int, @b int, @c int
SELECT
@a = huzzah.a
,@b = huzzah.b
,@c = huzzah.c
FROM (
SELECT
1 a
,2 b
,3 c
) huzzah
Этот запрос выдает мне следующую ошибку: " Ошибка: 141 Оператор SELECT, который присваивает значение переменной, нельзя сочетать с операциями извлечения данных. "
Единственный обходной путь, который у меня есть для этого, - это вставить данные производной таблицы во временную таблицу, а затем снова выбрать ее обратно. Что работает хорошо, но тот факт, что это не работает, раздражает меня. Есть ли лучший способ сделать это?
Решение
Ошибка действительно появляется, как описано в 12.5.3 esd 4 & amp; 7, он работает нормально в 12.5.4 esd 4 & amp; 6. Р>
Похоже, что ошибка была исправлена, ваши единственные варианты - обходной путь или исправление.
Нашли, как представляется, ошибку 377625
Другие советы
Я только что проверил ваш код на 12.5.3, и он хорошо разбирается ... ничего не возвращает, но он работает. Возможно, вы слишком сильно упростили проблему, потому что я вообще не вижу сообщений об ошибках.
Просто чтобы прояснить, следующее запускается и возвращает то, что вы ожидаете.
DECLARE @a int, @b int, @c int
SELECT
@a = huzzah.a
,@b = huzzah.b
,@c = huzzah.c
FROM (
SELECT
1 a
,2 b
,3 c
) huzzah
select @a
select @b
select @c