fadime Ответов: 6

выберите из статического списка


Привет ,

Мне нужно решение, что есть статический список
и я хочу использовать этот список в качестве таблицы в операторе select

как это :

SELECT * FROM (1,2,3,4)

result
------
1
2
3
4


спасибо


[Правка - перенесено из ответов]
Мне нужно запустить sql .
Действительно есть список который мне нужно вставить в таблицу
и я думаю, что мне следует использовать INSERT - SELECT
список выглядит примерно так :

(1,2,3,4,5 ... ) , я хочу иметь возможность использовать этот список в таблице
и 1-это один ряд , 2-это другой ряд ....

могу ли я объяснить ?

-----

Он будет только один раз использовать-нужно .
он не будет использоваться в sp и не с динамическим входом.

Мои входные данные статичны, и это "17001","17002" ...

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

как это

Вставить в таблицу 1(col1)
(Выберите one_col_val из ('17001','17002' ... , '17007') )

Нет : one_col_val-это один из '17001','17002' ...

Я нашел решение из интернета но это немного длинное решение но работает
это пример , который я тестирую, работает ли он, и да, он работает

create table xx (field1 varchar2(300) );
select * from xx;
insert into xx (select to_char(',17100,17300,17500,17700,') from dual);
 
INSERT INTO bddk_hesap_skont_pr(rapor_kod,satir,skont)
(
select 'MBFORM2',34,substr(field1, 
         instr(field1, ',', 1, rownum) + 1, -- start_pos
         instr(field1, ',', 1, rownum + 1) - 
             instr(field1, ',', 1, rownum) - 1 -- data_length
       ) new_data
   from xx ,    
        all_tables
  where rownum <= 
  (
  select length(
           ltrim(
             rtrim(
               translate(field1, ',1234567890', ',')
             )
           )
         ) - 1 rc
    from xx)
    
    )


[/РЕДАКТИРОВАТЬ]

[no name]

вы хотели сказать, что вам нужен временный столик?

Maciej Los

@fadime, пожалуйста, используйте виджет "улучшить вопрос", чтобы обновить свой вопрос.

Kuthuparakkal

Почему мы смотрим на вопрос, который был опубликован в начале 2010 года? Вы, ребята, думаете, что 2+ года-это время для того, чтобы ждать ответа. Что за шутка!

Santosh kumar Pithani

Привет,как я знаю, вы должны использовать функцию "string_split", чтобы получить записи в формате unpivot.

6 Ответов

Рейтинг:
2

supercat9

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

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


Рейтинг:
2

Member 13849618

ВЫБИРАТЬ *
От (значения(1),(2),(3),(4)) AS t (значение)


Рейтинг:
2

Christian Graus

В чем именно заключается проблема? Где находится "статический список"? Если это класс списка в коде, то почему вы хотите запустить SQL на нем ? Я думаю, что вы, вероятно, пытаетесь сделать что-то неправильное, чтобы решить свою основную проблему.


Рейтинг:
1

HJo

Старая нить, но я подумал, что могу поделиться этим решением. Я наткнулся на эту часть объединения, когда искал способ установить (выбрать все) по умолчанию для многозначного параметра со статическими значениями в службах Reporting Services. Комбинируя его со вставкой вы получаете вот это:

INSERT INTO Table_1 (col1)
(
SELECT 1
UNION 
SELECT 2
)


Рейтинг:
0

Eduard Lu

Попробуйте использовать следующие коды. Создайте временную таблицу для хранения статических данных

;WITH TempTable AS
{
   SELECT 1,2,3,4
}

-- now 1,2,3,4 is on a temporary table
SELECT * FROM TempTable


Пожалуйста отметьте как ответ и проголосуйте 5 если это решило вашу проблему

С уважением,
Эдуард


Santosh kumar Pithani

Это решение неверно в соответствии с требованиями ОП.

Рейтинг:
0

Amir Mahfoozi

Похоже, вам нужен динамический генератор последовательностей, так что попробуйте вот этот :

declare @start int
set @start = 17001
declare @finish int
set @finish = 17010;

with a(i)
as
(
select @start
union all
select a.i+1 from a where a.i<@finish
)
select * from a


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