我有一个存储过程,产生插入语句脚本作为结果。 我想执行这些语句,这样我可以在我的表执行存储过程输出脚本
填充数据例如:
SET NOCOUNT ON
INSERT INTO table ([UID], [Name])
VALUES ('1000002', 'name'),
('1000004', 'name2')
存储过程返回此作为结果,我想执行这个脚本我该怎么办呢?
我有一个存储过程,产生插入语句脚本作为结果。 我想执行这些语句,这样我可以在我的表执行存储过程输出脚本
填充数据例如:
SET NOCOUNT ON
INSERT INTO table ([UID], [Name])
VALUES ('1000002', 'name'),
('1000004', 'name2')
存储过程返回此作为结果,我想执行这个脚本我该怎么办呢?
如果我理解正确,上面的代码将在存储过程运行时打印出来。
我会从修改存储过程开始获取输出参数。存储过程“返回”整数值,而不是消息。他们碰巧打印出来的东西,但依靠这种行为是不好的。
然后,你可以简单地做:
declare @str nvarchar(max);
exec <stored procedure> @str output;
exec @str;
我怀疑有可能是一个更好的方式来构造代码。只有当你真正理解你在做什么时,才能完成存储过程返回代码。我不认为我曾经写过代码存储过程将返回一个插入语句。在存储过程本身中运行动态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;
http://github.com/drumsta/sql-generate-insert这将返回消息@Gordon Linoff –
@ZainAbbas。 。 。为什么不只是捕获输出并在SSMS窗口中运行? –
@ ZainAbbas,'PRINT'语句输出不能在T-SQL中轻易捕获。您需要像SQLCLR包装一样跳过这些箍环。考虑改变proc以返回整个脚本作为nvarchar(MAX)输出参数。 –
感谢名单所有的你,但以下是这样,我应该做的
USE db1;
SELECT *
INTO [table]
FROM [db2].[dbo].[table]
它帮助我复制表
你的代码与存储过程有什么关系? –
可能您正在从存储过程返回字符串。像'print @ qyery'。而不是这''exec @ query' – Lali
其实我想运行一个作业,生成与数据的表的脚本,并创建该表到另一个数据库...我能够通过存储过程生成脚本使用此示例http ://stackoverflow.com/questions/5065357/how-to-generate-an-insert-script-for-an-existing-sql-server-table-that-includes –