执行存储过程输出脚本

时间:2017-04-23 12:10:54

标签: sql sql-server stored-procedures

我有一个存储过程,它会生成一个insert语句的脚本作为结果。 我想执行这些语句,以便我可以填充表格中的数据

例如:

SET NOCOUNT ON

INSERT INTO table ([UID], [Name])
VALUES ('1000002', 'name'),
       ('1000004', 'name2')

存储过程返回此结果,我想执行此脚本我该怎么做?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,则在存储过程运行时会打印出上述代码。

我首先修改存储过程以获取输出参数。存储过程"返回"整数值,而不是消息。他们碰巧打印出来的东西,但依靠这种行为并不好。

然后,您可以这样做:

declare @str nvarchar(max);

exec <stored procedure> @str output;

exec @str;

我怀疑可能有更好的方法来构建代码。只有在您真正了解自己在做什么时,才能执行存储过程返回代码。我不认为我曾编写过代码,存储过程会返回一个insert语句。在存储过程本身中运行动态SQL似乎更好。

编辑:

您也可以捕获存储过程的输出:

declare @t table (id int identity, line nvarchar(max));

insert into @t(line)
    exec(<stored procedure>);

然后,您可以连接值。您可以将XML用于此目的,但我认为这将有效:

declare @str nvarchar(max);
set @str = '';

select @str = @str + line + ' '
from @t
order by id;

exec @str;

答案 1 :(得分:0)

Thanx所有人,但以下是我应该做的方式

USE db1;

SELECT *
INTO [table]
FROM [db2].[dbo].[table]

它可以帮我复制一张表