使用Sql表中的参数执行过程

时间:2019-01-07 06:41:01

标签: sql-server tsql stored-procedures

我有一个带有两个参数的过程和一个表,表中有两列分别定义为para1para2

现在,表中大约有5000行,我想使用列值作为输入参数来运行该过程。

我可以使用静态参数运行该过程,但是不知道如何使用表中的参数来执行该过程。

3 个答案:

答案 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)执行输出字符串