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
обычно намного сложнее. Таким образом, с переменной, код будет более чистым.
Возможно, я хочу много - или есть тип локальной переменной. Или используйте таблицу типов и установите данные внутри.
Что ты предлагаешь мне?
Спасибо
Ответы
Ответ 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,"
Можно быть очень креативным.
Спасибо
Нико