我有一个带有两个参数的过程和一个表,表中有两列分别定义为para1
和para2
。
现在,表中大约有5000行,我想使用列值作为输入参数来运行该过程。
我可以使用静态参数运行该过程,但是不知道如何使用表中的参数来执行该过程。
答案 0 :(得分:0)
您有两个选择-循环或使用动态T-SQL语句。
以下是使用后者的示例:
DECLARE @DataSource TABLE
(
[Param01] INT
,[Param02] VARCHAR(12)
);
INSERT INTO @DataSource ([Param01], [Param02])
VALUES (1, 'a2')
,(2, 'a2')
,(3, 'a4')
,(4, 'a0');
DECLARE @DynamictTSQLStatement NVARCHAR(MAX);
SELECT @DynamictTSQLStatement =
STUFF
(
(
SELECT CHAR(10) + 'EXEC [dbo].[my_stored_procedured] @Param01 = ' + CAST([Param01] AS VARCHAR(12)) + ', @Param02 = "' + [Param02] + '";'
FROM @DataSource
FOR XML PATH(''), TYPE
).value('.', 'VARCHAR(MAX)')
,1
,1
,''
);
EXEC sp_executesql @DynamictTSQLStatement;
对于循环来说,情况与所有语言都差不多。读取一行,获取当前参数值,执行该例程,然后继续下一行直到所有的行都被读取。
答案 1 :(得分:0)
我使用了以下代码,并且可以正常工作
create procedure [procedurename]
as
declare @field1 varchar(15)
declare @field2 varchar(15)
declare cur CURSOR LOCAL for
select field1, field2 from donor_update_list a
open cur
fetch next from cur into @field1, @field2
while @@FETCH_STATUS = 0
BEGIN
--execute your sproc on each row
exec uspYourSproc @field1, @field2
fetch next from cur into @field1, @field2
END
close cur
deallocate cur
答案 2 :(得分:-1)
只需创建您的过程,例如:
CREATE PROCEDURE s_proc_name @p1 nvarchar(30) = NULL, @p2 nvarchar(60) = NULL
AS
--your code
之后,您可以例如通过对表进行查询来创建字符串,例如:
select 's_proc_name ', columnP1, ' ', columnP2
from tableName
这将返回您可能输入的输出。
之后,您可以执行您要手动执行的行,只需复制粘贴即可,也可以将其放入临时表中,例如:
select 's_proc_name ', columnP1, ' ', columnP2
into #tmp
from tableName
并通过使用表上的循环以编程方式执行每一行,并使用EXEC(@record)
执行输出字符串