如何使用存储过程将表的所有记录插入另一个表中

时间:2011-06-13 09:47:37

标签: sql sql-server-2005 tsql

我有一张约13066条记录的表格,其中我想要添加另一张表格中的所有其他记录(约有1346条记录)。有一个存储过程执行插入,我想用它来插入所有记录。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:6)

除非你没有提供所有信息,例如“有重复信息”或“只有不存在”,否则就这么简单了

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>) 

答案 1 :(得分:2)

我可能误解了您的问题,但似乎您想要执行存储过程并将存储过程的结果插入主表。

要做到这一点,你可以这样做:

INSERT INTO dbo.YourMainTable
EXEC dbo.YourStoredProcedureName

修改

我能想到的唯一方法就是使用光标。

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的最佳用法,但如果你真的必须这样做,那么我就不会想到任何其他方式。