sql循环遍历表中的每一行

vig*_*urt 6 sql sql-server simulation

我创建了一个生成买入和卖出股票信号的程序.我还创建了测试不同信号的逻辑,并为每笔交易提供回报.

下一步是在很长一段时间内模拟战略及其规则.所有信息都导出到文本文件并导入SQL Server数据库中的表.我已经意识到我需要声明一些变量,如StartCapital,CurrentCapital,NumberOfPositions,PositionsLeft.其中一列被命名BuyPrice并指示何时购买以及哪个价格,当发生这种情况NumberOfPositions时应减去1.

该列SellPrice指示何时销售以及哪个价格,何时发生这种情况NumberOfPositions需要加一个.最大值NumberOfPositions应该是5和最小值0.期望的结果是看看如何CurrentCapital展开.

我非常感谢任何输入和某种SQL代码来启动表单.

小智 26

还有另一种循环方式.我已经看到很多答案将计数器增加1.然而,根据我的经验,无法保证数据集中的ID不会有间隙.

这是我经常使用的解决方案:

declare @idColumn int

select @idColumn = min( TableID ) from Table

while @idColumn is not null
begin
    /*
        Do all the stuff that you need to do
    */
    select @idColumn = min( TableID ) from Table where TableID > @idColumn
end
Run Code Online (Sandbox Code Playgroud)

  • 您需要让增量语句成为选择语句吗?或者你可以简单地设置 @idColumn = 吗? (2认同)
  • 很好的查询。惊人的 !!! (2认同)

Jor*_*dez 10

根据您的问题标题.这是我使用类型变量循环遍历表的每一行的方法TABLE:

DECLARE
    @counter    INT = 1,
    @max        INT = 0

-- Declare a variable of type TABLE. It will be used as a temporary table.
DECLARE @myTable TABLE (
    [Id]        int identity,
    [Column1]   nvarchar(max),
    [Column2]   nvarchar(100)
)

-- Insert your required data in the variable of type TABLE
INSERT INTO @myTable
SELECT Column1, Column2
FROM [dbo].[YOUR_DATABASE_TABLE]

-- Initialize the @max variable. We'll use thie variable in the next WHILE loop.
SELECT @max = COUNT(ID) FROM @myTable

-- Loop 
WHILE @counter <= @max
BEGIN

    -- Do whatever you want with each row in your table variable filtering by the Id column
    SELECT Column1, Column2
    FROM @myTable
    WHERE Id = @counter

    SET @counter = @counter + 1
END
Run Code Online (Sandbox Code Playgroud)