如何在SQL SERVER中 执行存储过程,然后把得到的数据导入到一张表中

时间:2022-12-13 07:42:53
我有个存储过程,  执行 EXEC 可以得到它的最终数据集, 我想把它的生成的数据, 可以直接导入或生成到一张表中, 不知道有什么好的办法?  谢谢

8 个解决方案

#1


select * into 表 from openrowset( 'SQLOLEDB', 'sql服务器名'; '用户名'; '密码','exec 存儲過程名')
 

#2


用游标 读取每条记录,然后追加到一个表里 。

Declare @num int;
DeClare cur Curosor for
select num from table1;
open cur;
fectch next from cur into @num;
while @@fetch_status = 0 
begin
  insert into table2(num) 
  valuse(@num);
  fectch next from cur into @num;
end 

#3


直接

CREATE PROCEDURE SP_TEST
AS
SELECT 1 UNION
SELECT 2 UNION
SELECT 3

测试

DECLARE @T TABLE(IDX INT)
INSERT INTO @T
EXEC SP_TEST

SELECT * FROM @t

结果

1
2
3

#4


select * into 表 from openrowset( 'SQLOLEDB', 'sql服务器名'; '用户名'; '密码','exec 存儲過程名')


我安装的SQL没有设用户名,密码, 是按WINDOWS模式装的,  该怎么样写?

#5


不用那么麻烦吧,比如建个临时表#table,这个#table的列要和存储过程的数据集列数要相同,然后insert into #table(....) exec 存储过程 '参数'....

#6


引用楼主 pepsipanli 的帖子:
我有个存储过程,  执行 EXEC 可以得到它的最终数据集, 我想把它的生成的数据, 可以直接导入或生成到一张表中, 不知道有什么好的办法?  谢谢

直接在存储过程的语句中使用:

select * into tb2 from tb1 --表tb2不存在
insert into tb2 select * from tb1 --表tb2存在

#7


引用 4 楼 pepsipanli 的回复:
select * into 表 from openrowset( 'SQLOLEDB', 'sql服务器名'; '用户名'; '密码','exec 存儲過程名') 


我安装的SQL没有设用户名,密码, 是按WINDOWS模式装的,  该怎么样写? 

--如果結果集,列數,類型已知
if object_id('tempdb..#')is not null drop table #
go
create table #(ID int ,col1 varchar(10),col2 varchar(10).........)
insert # exec 存儲過程

#8


我本来没有这张表的, 主要用来生成做"同步复制"功能用的.   存储过程生成的列很多,我自己建了张表, 设了相同的列名, 但使用insert into #table exec 存储过程,   它就报错了:  Insert Error: Column name or number of supplied values does not match table definition.

#1


select * into 表 from openrowset( 'SQLOLEDB', 'sql服务器名'; '用户名'; '密码','exec 存儲過程名')
 

#2


用游标 读取每条记录,然后追加到一个表里 。

Declare @num int;
DeClare cur Curosor for
select num from table1;
open cur;
fectch next from cur into @num;
while @@fetch_status = 0 
begin
  insert into table2(num) 
  valuse(@num);
  fectch next from cur into @num;
end 

#3


直接

CREATE PROCEDURE SP_TEST
AS
SELECT 1 UNION
SELECT 2 UNION
SELECT 3

测试

DECLARE @T TABLE(IDX INT)
INSERT INTO @T
EXEC SP_TEST

SELECT * FROM @t

结果

1
2
3

#4


select * into 表 from openrowset( 'SQLOLEDB', 'sql服务器名'; '用户名'; '密码','exec 存儲過程名')


我安装的SQL没有设用户名,密码, 是按WINDOWS模式装的,  该怎么样写?

#5


不用那么麻烦吧,比如建个临时表#table,这个#table的列要和存储过程的数据集列数要相同,然后insert into #table(....) exec 存储过程 '参数'....

#6


引用楼主 pepsipanli 的帖子:
我有个存储过程,  执行 EXEC 可以得到它的最终数据集, 我想把它的生成的数据, 可以直接导入或生成到一张表中, 不知道有什么好的办法?  谢谢

直接在存储过程的语句中使用:

select * into tb2 from tb1 --表tb2不存在
insert into tb2 select * from tb1 --表tb2存在

#7


引用 4 楼 pepsipanli 的回复:
select * into 表 from openrowset( 'SQLOLEDB', 'sql服务器名'; '用户名'; '密码','exec 存儲過程名') 


我安装的SQL没有设用户名,密码, 是按WINDOWS模式装的,  该怎么样写? 

--如果結果集,列數,類型已知
if object_id('tempdb..#')is not null drop table #
go
create table #(ID int ,col1 varchar(10),col2 varchar(10).........)
insert # exec 存儲過程

#8


我本来没有这张表的, 主要用来生成做"同步复制"功能用的.   存储过程生成的列很多,我自己建了张表, 设了相同的列名, 但使用insert into #table exec 存储过程,   它就报错了:  Insert Error: Column name or number of supplied values does not match table definition.