Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 存储过程的循环_Sql_Sql Server_Loops_While Loop - Fatal编程技术网

Sql 存储过程的循环

Sql 存储过程的循环,sql,sql-server,loops,while-loop,Sql,Sql Server,Loops,While Loop,我有一个将数据写入表的存储过程 我要做的是在存储过程中使用一个变量 以及从单独的查询中获取的要分配项目编号的变量 例如:从xTable中选择项目编号 返回 我需要一个循环,将变量从A1分配到J9,并每次运行存储过程 这将多次运行存储过程,以便对“我的结果”表中的所有项运行该存储过程 谢谢用光标试试这个 听起来您最好的选择是使用光标 光标在查询中循环,并根据查询结果的每一行设置一个变量。可以在游标体中调用存储过程,将填充的变量作为参数传递给该过程 光标的语法如下所示: DECLARE @item

我有一个将数据写入表的存储过程

我要做的是在存储过程中使用一个变量 以及从单独的查询中获取的要分配项目编号的变量

例如:从xTable中选择项目编号 返回

我需要一个循环,将变量从A1分配到J9,并每次运行存储过程

这将多次运行存储过程,以便对“我的结果”表中的所有项运行该存储过程

谢谢

用光标试试这个


听起来您最好的选择是使用光标

光标在查询中循环,并根据查询结果的每一行设置一个变量。可以在游标体中调用存储过程,将填充的变量作为参数传递给该过程

光标的语法如下所示:

DECLARE @item CHAR(2)

DECLARE item_cursor CURSOR FAST_FORWARD READ_ONLY FOR
SELECT ITEM_NUMBER from xTable

OPEN item_cursor

FETCH NEXT FROM item_cursor INTO @item

WHILE @@FETCH_STATUS = 0
BEGIN

--Execute your stored procedure here, supplying @item as the parameter

FETCH NEXT FROM item_cursor INTO @item

END

CLOSE item_cursor

DEALLOCATE item_cursor
用这个试试

声明@itemNumber VARCHAR50; 声明的db_游标 从xTable中选择项目编号; 打开db_光标 从db_游标获取下一个到@itemNumber 而@@FETCH\u STATUS=0 开始 -在这里调用存储过程 从db_游标获取下一个到@itemNumber 终止 关闭db_光标 两种方式解除分配db_游标

Select ITEM_NUMBER into #X from xTable

DECLARE @PartVar varchar(10)
WHILE(0 < (Select Count(*) from #X))
  BEGIN
  SET ROWCOUNT 1
  Select @PartVar = ITEM_NUMBER from #X
  -- EXEC PROC @PartVar
  SET ROWCOUNT 0
  DELETE #X where ITEM_NUMBER = @PartVar
  END
仅转发
指定光标只能从第一行滚动到最后一行。FETCH NEXT是唯一受支持的FETCH选项。如果只指定FORWARD_而不指定STATIC、KEYSET或DYNAMIC关键字,则光标将作为动态光标运行。如果未指定FORWARD_ONLY或SCROLL,则默认为FORWARD_ONLY,除非指定了关键字STATIC、KEYSET或DYNAMIC。静态、键集和动态光标默认为滚动。与ODBC和ADO等数据库API不同,FORWARD_仅支持静态、键集和动态Transact-SQL游标。

使用游标进行循环。您好,答案如下:在一个简单的级别上,使用FAST_FORWARD游标。但是等等,总的来说,更好的方法是编写另一个在整个集合上工作的存储过程。在循环的ned之前,您错过了从TestCursor获取下一个到@sItemNumber的步骤:
DECLARE @item CHAR(2)

DECLARE item_cursor CURSOR FAST_FORWARD READ_ONLY FOR
SELECT ITEM_NUMBER from xTable

OPEN item_cursor

FETCH NEXT FROM item_cursor INTO @item

WHILE @@FETCH_STATUS = 0
BEGIN

--Execute your stored procedure here, supplying @item as the parameter

FETCH NEXT FROM item_cursor INTO @item

END

CLOSE item_cursor

DEALLOCATE item_cursor
Select ITEM_NUMBER into #X from xTable

DECLARE @PartVar varchar(10)
WHILE(0 < (Select Count(*) from #X))
  BEGIN
  SET ROWCOUNT 1
  Select @PartVar = ITEM_NUMBER from #X
  -- EXEC PROC @PartVar
  SET ROWCOUNT 0
  DELETE #X where ITEM_NUMBER = @PartVar
  END
DECLARE @PartVar varchar(10)
DECLARE LOC CURSOR FORWARD_ONLY FOR SELECT ITEM_NUMBER from xTable
OPEN LOC
FETCH NEXT FROM LOC into @PartVar

WHILE(@@FETCH_STATUS = 0)
BEGIN
  EXEC PROC @PartVar
  FETCH NEXT FROM LOC into @PartVar
END

CLOSE LOC
DEALLOCATE LOC