以表数据作为参数运行存储过程

本文关键字:参数 运行 存储过程 数据 | 更新日期: 2023-09-27 18:34:19

我在 id_table 中有许多 id,我需要至少对 table1 中的行运行此过程。 我正在使用 while 循环运行循环,直到表 1 中的计数完成,但谁能告诉我如何每次都更改@ID。

如果有人能告诉我如何在 c# 中做也没问题。

declare @ID INT
declare @noRun1 INT
declare @howTime INT
set @noRun1=1
set @howTime = (select count(*) from table1)
set @ID =(select top 1 id from id_table)
while (@noRun1<=@howTime)
begin 
    EXEC proc_run @ID
set @noRun1=@noRun1+1
end

以表数据作为参数运行存储过程

试试这个

    DECLARE @uniqueId int
DECLARE @TEMP TABLE (uniqueId int)
-- Insert into the temporary table a list of the records to be updated
INSERT INTO @TEMP (uniqueId) SELECT uniqueId FROM myTable
-- Start looping through the records
WHILE EXISTS (SELECT * FROM @TEMP)
BEGIN
-- Grab the first record out
SELECT Top 1 @uniqueId = uniqueId FROM @TEMP
PRINT 'Working on @uniqueId = ' + CAST(@uniqueId as varchar(100))
-- Perform some update on the record
EXEC proc_run @uniqueId
-- Drop the record so we can move onto the next one
DELETE FROM @TEMP WHERE uniqueId = @uniqueId
END

所以你想为表中的每个 id 执行一个存储过程吗?重写您选择的 id,以便您可以跳过许多行。像这样:

while (@noRun1 <= @howTime)
begin 
    select @ID = id from
        (select id, (ROW_NUMBER() over (order by id)) as numrow from id_table) as tab
    where numrow = @noRun1
    EXEC proc_run @ID
    set @noRun1 = @noRun1 + 1
end

如果使用的是 SQL Server 2008+,则可以重写存储过程以接受表值参数,传递整个 id 列表并仅执行一次。看看这个例子:http://technet.microsoft.com/en-us/library/bb510489.aspx