我有一个存储过程,它会生成一个insert语句的脚本作为结果。 我想执行这些语句,以便我可以填充表格中的数据
例如:
SET NOCOUNT ON
INSERT INTO table ([UID], [Name])
VALUES ('1000002', 'name'),
('1000004', 'name2')
存储过程返回此结果,我想执行此脚本我该怎么做?
答案 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]
它可以帮我复制一张表