2013-05-13 72 views
-1

我不是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)的一次。

回答

5

您不能对函数执行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 
+0

正是!谢谢拉马克;) – Br3x 2013-05-13 22:14:00

3

你也可以使用数字表来避免循环的需要。

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; 
+1

一如既往,一个非常好的答案。 – Lamak 2013-05-13 22:02:29

+0

啊!不错,谢谢! – Br3x 2013-05-13 22:15:20