Как объединить присвоение переменной с операциями извлечения данных в T-SQL - PullRequest
1 голос
/ 27 октября 2008

Просто чтобы уточнить, я использую 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, который присваивает значение переменной, нельзя объединять с операциями извлечения данных."

Единственный обходной путь, который у меня есть для этого, - это вставить данные производной таблицы во временную таблицу, а затем снова выбрать ее обратно. Что работает хорошо, но тот факт, что это не работает, раздражает меня. Есть ли лучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 30 октября 2008

Ошибка появляется, как описано в 12.5.3 esd 4 & 7, она отлично работает в 12.5.4 esd 4 & 6.

Похоже, что ошибка была исправлена, ваши единственные варианты - обходной путь или исправление.

Нашли что-то вроде ошибки 377625

1 голос
/ 27 октября 2008

Я только что проверил ваш код на 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
...