如何将此函数转换为SQL Server功能?
问题描述:
我不是TSQL是亲,我有这个功能:如何将此函数转换为SQL Server功能?
for (i=1;i<=30;i++) {
for (j=1;j<=10;j++){
insert into NAMES values ("","","Name"+i+" - fn"+j", "Name"+i+" - fn"+j", "Numeric", "R",0,"N",0,"00");
}
}
我想把它转换成SQL函数,以便将其插入的所有300条记录(30×10)的一次。
答
您不能对函数执行INSERT
。如果我正确理解了你的话,这就是你想要的:
DECLARE @I INT, @J INT
SET @I = 1
SET @J = 1
WHILE @I <= 30
BEGIN
WHILE @J <= 10
BEGIN
INSERT INTO NAMES
SELECT '',
'',
'Name'+CAST(@I AS VARCHAR(2))+' - fn'+CAST(@J AS VARCHAR(2)),
'Name'+CAST(@I AS VARCHAR(2))+' - fn'+CAST(@J AS VARCHAR(2)),
'Numeric',
'R',
0,
'N',
0,
'00'
SET @J = @J + 1
END
SET @J = 1
SET @I = @I + 1
END
答
你也可以使用数字表来避免循环的需要。
WITH
L0 AS(SELECT 1 AS c UNION ALL SELECT 1),
L1 AS(SELECT 1 AS c FROM L0 AS A CROSS JOIN L0 AS B),
L2 AS(SELECT 1 AS c FROM L1 AS A CROSS JOIN L1 AS B),
L3 AS(SELECT 1 AS c FROM L2 AS A CROSS JOIN L2 AS B),
L4 AS(SELECT 1 AS c FROM L3 AS A CROSS JOIN L3 AS B),
Nums AS(SELECT TOP(300) ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS n FROM L4),
IJ(i,j) AS(SELECT CAST(1 + n%30 AS VARCHAR(2)), CAST(1 + n%10 AS VARCHAR(2)) FROM Nums)
INSERT INTO NAMES
SELECT '',
'',
'Name' + i + ' - fn' + j,
'Name' + i + ' - fn' + j,
'Numeric',
'R',
0,
'N',
0,
'00'
FROM IJ;
正是!谢谢拉马克;) – Br3x 2013-05-13 22:14:00