【问题标题】:Double While Transac SQL Server 2008SQL Server 2008 的双倍同时事务处理
【发布时间】:2015-02-19 05:51:46
【问题描述】:

我在处理这个查询时遇到了一些问题。问题是只有一段时间是过程,第一个,不适合我。

这是我的代码: 虽然@j,不工作,但我没有看到错误......

感谢您的宝贵时间。

CREATE PROCEDURE InsertVar
AS

DECLARE @i int
DECLARE @j int

SET NOCOUNT ON;
SET @i = 1
SET @j = 1

    WHILE @j < 21
        BEGIN
            WHILE @i < 11
                BEGIN
                    INSERT INTO Var(idline,idVar,CheckBox ) 
                    VALUES(@j,@i,0); 
                    SET @i = @i + 1;
                END;
        SET @j = @j + 1;
    END;

SELECT * FROM Var;
GO

【问题讨论】:

  • 不要这样做,你循环需要太多时间

标签: sql-server while-loop


【解决方案1】:

还有其他方法可以执行此逻辑(例如单个查询)。但是您的问题是您没有在循环内重新初始化 i 。试试这个:

CREATE PROCEDURE InsertVar
AS
BEGIN
    DECLARE @i int;
    DECLARE @j int;

    SET NOCOUNT ON;
    SET @j = 1;

    WHILE @j < 21
        BEGIN
            SET @i = 1;
            WHILE @i < 11
                BEGIN
                    INSERT INTO Var(idline, idVar, CheckBox) 
                        VALUES(@j, @i, 0); 
                    SET @i = @i + 1;
                END;
        SET @j = @j + 1;
    END;

    SELECT * FROM Var;
END;
GO

【讨论】:

  • @Mohit 在过程结束时设置 `NOCOUNT OFF` 毫无意义。退出 proc 无论如何都会重置它。
【解决方案2】:

使用Recursive CTE 生成行。无需使用while loopdeclaration of varaiables

CREATE PROCEDURE Insertvar
AS
  BEGIN
      SET NOCOUNT ON;

        ;WITH cte
             AS (SELECT 1 AS idline
                 UNION ALL
                 SELECT idline + 1 FROM   cte
                 WHERE  idline < 20),
             cte1
             AS (SELECT idline,1 AS idVar,0 AS CheckBox
                 FROM   cte
                 UNION ALL
                 SELECT idline,idVar + 1,CheckBox FROM   cte1
                 WHERE  idVar < 10)
        INSERT INTO [Var]
        SELECT * FROM   cte1
        ORDER  BY idline,idVar 

      SELECT * FROM   [Var]
  END 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    相关资源
    最近更新 更多