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