我有一張桌子
number | letter
------- ---------
1 | A
2 | B
我有這個代碼:
declare @counter as int = 0
while (@counter < 16)
begin
set @counter = @counter 1
insert into table (number, letter)
values (@counter, 'A')
insert into table (number, letter)
values (@counter, 'B')
end
我對這個宣告的問題是它產生了這樣的東西:
number | letter
------- ----------
1 | A
1 | B
2 | A
2 | B
我想要的是有 8 行,因為計數器在 15 之后停止并且@counter 從 0 開始
number | letter
------- ---------
1 | A
2 | B
3 | A
4 | B
5 | A
6 | B
7 | A
8 | B
我試過 putBEGIN和ENDper statement,但我仍然無法實作我的目標:
declare @counter as int = 0
while (@counter < 16)
begin
insert into table (number, letter)
values (@counter, 'A')
end
begin
insert into table (number, letter)
values (@counter, 'B')
set @counter = @counter 1
end
uj5u.com熱心網友回復:
我和@Larnu 在一起,為什么不簡單地使用IDENTITYon number?
但是,如果您堅持自己做,一種方法是將計數器遞增,2而不是1將當前值'A'和當前值 1一起插入'B'。
DECLARE @counter AS integer = 1;
WHILE @counter <= 8
BEGIN
INSERT INTO elbat
(number,
letter)
VALUES (@counter,
'A');
INSERT INTO elbat
(number,
letter)
VALUES (@counter 1,
'B');
SET @counter = @counter 2;
END;
資料庫<>小提琴
uj5u.com熱心網友回復:
您可以VALUES為此使用兩個交叉連接的虛擬子句。不需要WHILE回圈。
INSERT INTO [table] (number, letter)
SELECT
ROW_NUMBER() OVER (ORDER BY (SELECT 1)),
v2.letter
FROM (VALUES
(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)
) v1(counter)
CROSS JOIN (VALUES ('A'), ('B') ) v2(letter);
dbfiddle.uk
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/372104.html
標籤:sql sql-server
