Что использовать в SQL вместо цикла "Foreach" - PullRequest
2 голосов
/ 09 июля 2009

Я пытаюсь написать хранимую процедуру в SQL, которая будет:

Сделайте запрос выбора из таблицы1, который будет возвращать несколько значений Вставьте новые значения в таблицу 2 (1 новая запись в таблице 2 для каждой записи, возвращаемой функцией выбора в таблице 1).

Я бы использовал foreach в C #, но я знаю, что SQL не работает таким образом. Как правильно это сделать?

Спасибо!

Ответы [ 5 ]

9 голосов
/ 09 июля 2009
INSERT INTO tabl2 (name, id)
   SELECT name, id FROM table1

EDIT

Я должен добавить, что циклы действительно могут быть очень полезны в SQL, так что вы можете знать, как это сделать. Вот один пример:

DECLARE @temp TABLE (ix int identity(1,1), id int, name varchar(100))

INSERT INTO @temp SELECT id, name FROM table1

DECLARE @i int, @max int

SELECT
   @i = 0
   @max = MAX(ix)
FROM
   @temp

WHILE @i < @max
BEGIN
   SET @i = @i + 1

   -- LOGIC HERE...

END
2 голосов
/ 09 июля 2009

То, что вы хотите, это оператор вставки / выбора, а не для каждого. Если вам нужно перебирать строки, чтобы что-то сделать, вам следует подумать: «Как мне добиться того же в решении на основе множеств». Неспособность думать на основе множеств при работе в SQL может очень быстро привести вас к проблемам с производительностью.

INSERT Table2
       (Col1,
        Col2)
SELECT T1Col1,
       T1Col2
FROM   Table1
WHERE  T1Col2 = 'whatever'
2 голосов
/ 09 июля 2009

SQL - это язык на основе множеств. Что вы делаете, это выражаете желаемый результат в виде запроса - который возвращает «набор», который затем вставляется в новую таблицу.

Вы МОЖЕТЕ использовать КУРСОР, который основан на строке за строкой, но это действительно последнее средство. Очень редко я обнаружил, что это единственный выход.

может быть, если вы разместите более подробную информацию о вашей проблеме, мы можем помочь!

1 голос
/ 09 июля 2009

В этом случае "foreach" не требуется. Для тех редких случаев, которые вы делаете, посмотрите на курсоры и while-loop . Синтаксис настолько неудобен, что вы автоматически избегаете их, если можете:)

Для вашей вставки, что-то вроде этого должно сделать:

INSERT INTO table2 (name, id)
   SELECT name, id FROM table1

(скопировано для полноты картины)

1 голос
/ 09 июля 2009

Вы можете использовать выбор как значения для вставки

INSERT INTO Table1
(
    FieldA,
    FieldB
)
SELECT
    FieldA,
    FieldB
FROM Table2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...