2013-05-13 69 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