sql >> データベース >  >> RDS >> Sqlserver

SQLServer2008でdoublewhileループを使用する方法

    OK、これで望ましい結果が得られますが、疑わしいです。その後、少し改善していきます。

    DECLARE @tblCalendar TABLE(
            CalendarEntryID INT,
            Slot INT
    )
    
    DECLARE
    @x int, @y int
    
    SET @X = 1 SET @y = 1
    
    WHILE @X <= 100
    BEGIN 
    
        WHILE @Y <=8 AND @X <= 100--LOOP FOR SLOT COLUMN
                BEGIN
                INSERT INTO @tblCalendar (CalendarEntryID,Slot)
                Values (@x, @y)
    
                    SET @y = @y + 1
                    SET @x = @x + 1
                end
    
        SET @y = 1
    END
    
    
    SELECT  *
    FROM    @tblCalendar
    

    もう1つのアプローチは、 IDENTITYCOLUMN を利用することです。

    のようなもの

    DECLARE @tblCalendar TABLE(
            CalendarEntryID INT IDENTITY(1,1),
            Slot INT
    )
    
    DECLARE
    @x int, @y int
    
    SET @X = 1 SET @y = 1
    
    WHILE @X <= 100
    BEGIN 
    
        WHILE @Y <=8 AND @X <= 100--LOOP FOR SLOT COLUMN
                BEGIN
                INSERT INTO @tblCalendar (Slot)
                Values (@y)
    
                    SET @y = @y + 1
                    SET @x = @x + 1
                end
    
        SET @y = 1
    END
    
    
    SELECT  *
    FROM    @tblCalendar
    

    しかし、個人的には私は行きました

    DECLARE @Max INT = 100,
            @MaxGroup INT = 8
    
        ;WITH Val AS (
                SELECT  1 CalendarEntryID
                UNION ALL
                SELECT  CalendarEntryID + 1
                FROM    Val
                WHERE   CalendarEntryID + 1 <= @Max
        )
        SELECT  CalendarEntryID,
                ((CalendarEntryID - 1) % @MaxGroup) + 1 Slot
        FROM    Val
        OPTION (MAXRECURSION 0)
    


    1. MySQLテーブルを2番目のドライブに移動できますか?

    2. この関数にテーブルパラメータを渡すにはどうすればよいですか?

    3. タグ(キーワード)をデータベースに保存する方法は?

    4. postgresqlでnull値をカウントする方法は?