我有一张约13066条记录的表格,其中我想要添加另一张表格中的所有其他记录(约有1346条记录)。有一个存储过程执行插入,我想用它来插入所有记录。有人可以帮忙吗?
答案 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的最佳用法,但如果你真的必须这样做,那么我就不会想到任何其他方式。