【问题标题】:How do I loop through the results of a SELECT statement sql and use the result for stored procedure?如何循环遍历 SELECT 语句 sql 的结果并将结果用于存储过程?
【发布时间】:2016-07-12 09:50:38
【问题描述】:

我想通过游标将选择查询的结果用于存储过程,但它不起作用。

这是我的代码:

DECLARE @NumberPhone varchar(50)
DECLARE CUR CURSOR STATIC FOR

SELECT  MobilePhone
FROM info_client

OPEN CUR
FETCH NEXT FROM CUR INTO @NumberPhone 

WHILE @@FETCH_STATUS = 0
BEGIN
     DECLARE @return_value int, @idCli int, @sCode varchar(2)

     EXEC   @return_value = StoredP_Test
            @sLignePhone = @NumberPhone,
            @sIMEI ='00000000000000000',
            @idCli = @idCli OUTPUT,
            @sCode = @sCode OUTPUT

    SELECT @idCli as N'@idCli',
           @sCode as N'@sCode'  

    FETCH NEXT FROM CUR INTO @NumberPhone 

    SELECT 'Return Value' = @return_value
END

CLOSE CUR 
DEALLOCATE CUR

此代码与选择查询的行数重复相同的结果。

【问题讨论】:

  • 您要执行哪个程序?没有名字?
  • 你在第一轮使用@NumberPhone,但在其余部分使用@sLigneAssValue
  • 也许您根本不需要光标?根据该过程正在做什么,游标很可能只是减慢此过程的方法。
  • 请不要开始编写 sql server 之类的代码。请。 sqlservercentral.com/Forums/Topic642789-338-1.aspx

标签: sql sql-server tsql stored-procedures cursor


【解决方案1】:

你的代码有一个初始提取

FETCH NEXT FROM CUR INTO @NumberPhone 

你的代码在循环中有一个 fetch next

FETCH NEXT FROM CUR INTO @sLigneAssValue

您不想将 next 提取到 @NumberPhone 变量中吗?

@NumberPhone 变量永远不会改变。

【讨论】:

  • 我在发布我的代码时犯了一个错误,为什么,我有两个变量并且不一样,但我编辑了我的代码,我修改了它。问题是:执行过程的结果总是相同的结果,因为它传递给过程选择的第一行的数字电话,它没有传递给下一行等
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-02
  • 1970-01-01
  • 2018-05-03
  • 2015-06-08
  • 2016-01-30
  • 1970-01-01
相关资源
最近更新 更多