Подтвердить что ты не робот

SQL-запрос, результат сохранения SELECT в локальной переменной

Я создаю запрос с повторными результатами. Я ищу способ поместить результат в переменную и использовать его.

Простой способ увидеть, что я хочу, что-то похожее на это - я хочу это:

DECLARE @result1 ?????

SET @result1 = SELECT a,b,c FROM table1
SELECT a AS val FROM @result1
UNION
SELECT b AS val FROM @result1
UNION
SELECT c AS val FROM @result1

Не это:

 SELECT a AS val FROM (SELECT a,b,c FROM table1)
 UNION
 SELECT b AS val FROM (SELECT a,b,c FROM table1)
 UNION
 SELECT c AS val FROM (SELECT a,b,c FROM table1)

Это не результат этого запроса, о котором я беспокоюсь, но вместо этого:

  • чтобы остановить выбор результата так много раз - в моем примере я повторно отобразил таблицу 3 раза

  • запрос @result1 обычно намного сложнее. Таким образом, с переменной, код будет более чистым.

Возможно, я хочу много - или есть тип локальной переменной. Или используйте таблицу типов и установите данные внутри.

Что ты предлагаешь мне?

Спасибо

4b9b3361

Ответ 1

Вы можете создавать переменные таблицы:

DECLARE @result1 TABLE (a INT, b INT, c INT)

INSERT INTO @result1
SELECT a, b, c
FROM table1

SELECT a AS val FROM @result1
UNION
SELECT b AS val FROM @result1
UNION
SELECT c AS val FROM @result1

Это должно быть хорошо для того, что вам нужно.

Ответ 2

Вот некоторые другие подходы, которые вы можете предпринять.

1. CTE с объединением:

;WITH cte AS (SELECT a, b, c FROM table1)
SELECT a AS val FROM cte
UNION SELECT b AS val FROM cte
UNION SELECT c AS val FROM cte;

2. CTE с univot:

;WITH cte AS (SELECT a, b, c FROM table1)
SELECT DISTINCT val
FROM cte
UNPIVOT (val FOR col IN (a, b, c)) u;

Ответ 3

Разве это не намного проще, если я правильно понимаю вопрос, конечно.

Я хочу загрузить адреса электронной почты, которые находятся в таблице со спамом, в переменную.

select email from spam

выводит следующий список:

.accountant
.bid
.buiilldanything.com
.club
.cn
.cricket
.date
.download
.eu

Чтобы загрузить в переменную @list:

declare @list as varchar(8000)
set @list += @list (select email from spam)

@list теперь может быть вставлен в таблицу и т.д.

Надеюсь, это поможет.

Чтобы использовать его для CSV файла или VB, введите код:

declare @list as varchar(8000)
set @list += @list (select '"'+email+',"' from spam)
print @list

и он создает готовый код для использования в другом месте:

".accountant,"
".bid,"
".buiilldanything.com,"
".club,"
".cn,"
".cricket,"
".date,"
".download,"
".eu,"

Можно быть очень креативным.

Спасибо

Нико