Как вставить все записи таблицы в другую таблицу с помощью хранимой процедуры - PullRequest
1 голос
/ 13 июня 2011

Я получил таблицу с приблизительно 13066 записями, в которую я хочу добавить все другие записи из другой таблицы (имеющей приблизительно 1346 записей). Существует хранимая процедура, которая выполняет вставку, и я хочу использовать ее для всех записей, которые будут вставлены. Может кто-нибудь помочь, пожалуйста?

Ответы [ 2 ]

6 голосов
/ 13 июня 2011

Это так просто, если вы не предоставили всю информацию, например, «есть дубликаты» или «только если их еще нет»

CREATE PROC DoSomething
AS
SET NOCOUNT ON
INSERT table1 (col1, col2, etc)
SELECT col1, col2, etc FROM table2
GO

Редактировать:

Что-то не хватает.

OP хочет, чтобы цикл через table2 мог вызывать существующую хранимую процедуру

Чтобы сделать это правильно, вы должны использовать

INSERT table1 (col1, col2, etc)
SELECT col1, col2, etc FROM table2 t2
WHERE NOT EXISTS (SELECT * FROM table1 t1
                    WHERE t1.key = t2.key and <some conditions>) 
2 голосов
/ 13 июня 2011

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

Для этого вы можете сделать:

INSERT INTO dbo.YourMainTable
EXEC dbo.YourStoredProcedureName

EDIT:

Единственный способ сделать это - использовать курсор.

DECLARE @PrimaryKeyFieldInTable2 int

DECLARE spCur CURSOR LOCAL FOR

   SELECT PrimaryKetCol From Table2

OPEN spCur

FETCH NEXT FROM spCur INTO @PrimaryKeyFieldInTable2


WHILE @@FETCH_STATUS = 0 BEGIN

    INSERT INTO dbo.Table1
    EXEC dbo.YourStoredProceudre @PrimaryKeyFieldInTable2

    FETCH NEXT FROM spCur INTO @PrimaryKeyFieldInTable2 

END

CLOSE spCur
DEALLOCATE spCur

Предполагается, что ваша хранимая процедура принимает один параметр для выбора каждой строки из таблицы 2.

Это не лучшее использование SQL Server, но если вам действительно нужно сделать это таким образом, я не могу придумать другого пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...