1

Whileステートメントについてサポートが必要です。これまで使用したことがなく、ターゲットに到達するまでシーケンスを繰り返す必要があるのではないかと考えていました。

例えば

1
2
3
4
1
2
3
4
Until 5000

私は自分で書き込もうとしましたが、行き詰まりました:

USE Occupancy
CREATE TABLE Bookings2
(Booking_Skey   INT IDENTITY (1,1) not null,
PitchType_Skey  INT  not null)

DECLARE @PitchType_Skey INT
SET @PitchType_Skey = 1
WHILE (@PitchType_Skey <= 4)

BEGIN
INSERT INTO Bookings2(PitchType_Skey)
SELECT @PitchType_Skey
SET @PitchType_Skey = @PitchType_Skey + 1
END
4

2 に答える 2

1

しばらくの間、選択したものを

SELECT (CASE WHEN @PitchType_Skey % 4 = 0 THEN 4 ELSE @PitchType_Skey % 4 END)

%はモジュラスまたは剰余であるため、@ PitchType_Skey / 4の残りを取得します(4未満の値を保証します)

次に、0を4に置き換える必要があります

WHILE (@PitchType_Skey <= 5000)
BEGIN
  INSERT INTO Bookings2(PitchType_Skey)
  SELECT (CASE WHEN @PitchType_Skey % 4 = 0 THEN 4 ELSE @PitchType_Skey % 4 END)
  SET @PitchType_Skey = @PitchType_Skey + 1
END
于 2013-02-08T16:03:19.840 に答える
1

master..spt_valuesを使用できるので、実際にはしばらくは必要ありません。

WITH t1250
     AS (SELECT TOP 1250 Row_number() 
                           OVER( 
                             ORDER BY t1.number) AS N 
         FROM   master..spt_values t1 
                CROSS JOIN master..spt_values t2) 
INSERT INTO Bookings2
      (PitchType_Skey)
    
SELECT v.number 
FROM   master..spt_values v 
       CROSS JOIN t1250
WHERE  v.type = 'P' 
       AND v.number > 0 
       AND v.number < 5

デモ

または、msmucker0527が実行したようにModulsを使用します

WITH t5000
     AS (SELECT TOP 5000 Row_number() 
                           OVER( 
                             ORDER BY t1.number) AS N 
         FROM   master..spt_values t1 
                CROSS JOIN master..spt_values t2) 
INSERT INTO Bookings2
   (PitchType_Skey)
SELECT 
      CASE WHEN n % 4 = 0 THEN 4 ELSE n % 4 END
FROM t5000 

デモ

于 2013-02-08T16:55:11.063 に答える