2016-06-16 9 views
0

ich eine Testtabelle erstellt haben, zu testen, ob dies möglich ist, meine Aufgabe ist denselben Wert in mehrere Zeilen hinzuzufügen:Hinzufügen von vordefinierten Wert in mssql mehrfach

declare @counter int 
set @counter = 100 

case when @counter > 0 then insert into table test values('1','2') 
@[email protected] - 1 

Jetzt sollte hinzufügen, die Werte 1 und 2 in 100 Zeilen, aber es funktioniert nicht. Kann jemand bestätigen, ob der obige Code nahe ist, um die Aufgabe zu lösen?

Antwort

2
DECLARE @counter INT = 100; 

WHILE @counter > 0 
BEGIN 
    insert into table test values('1','2'); 
    @[email protected] - 1; 
END; 

Aber das ist wahrscheinlich besser, weil alle 100 Einsatz bei gleichzeitig senden

Fiddle Demo

CREATE table test (
    f1 text, 
    f2 text 
);  

;WITH e1(n) AS 
(
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 
), -- 10 
e2(n) AS (
    SELECT 1 FROM e1 CROSS JOIN e1 AS b 
) -- 100 
INSERT INTO test 
    SELECT '1', '2' 
    FROM e2; 

SELECT * 
FROM test; 
+0

Das funktioniert perfekt! Eine zweite Frage ist, was ist die maximale Anzahl, die ich einfügen kann, ohne den Datenbankschaden zu riskieren? 100.000 mehr? – MishMish

+0

erste Version kann jede Zahl unterstützen, Sie beschränken nur 'INT' zweite Version müssen Sie den CTE, mit e3 (n) für 1k, e4 (n) für 10k und e5 (n) für 100k erweitern. Ihr einziges Limit sollte Speicher sein, aber 100k ist nichts für so eine kleine Abfrage. –

0
;WITH rws AS 
(
    SELECT TOP 100 1 AS dummy 
    FROM sys.objects o1 
    CROSS JOIN sys.objects o2 
) 
--INSERT INTO MyTable(id_1, id_2) 
SELECT 1 AS id_1, 2 AS id_2 
FROM rws 
2

Da dies nur für die Prüfung ist, dass Sie diese super einfach machen könnte. Ich würde niemals Code wie diesen in der Produktion verwenden, aber um Testdaten zu erzeugen, ist es in Ordnung.

insert into table test values('1','2') 
go 100 
+0

das erste Mal sehe ich das, aber es scheint, als ob etwas fehlt. Ich versuche es [** HIER **] (http://rexttester.com/JAQAD95831) und habe einen Fehler für die 'Go'-Syntax. Können Sie überprüfen, was fehlt? –

+0

Ich bezweifle, dass es dort funktionieren würde. Es ist eine SSMS-Verknüpfung, die Sie verwenden können. Ich habe es nie irgendwo außerhalb von dort arbeiten gesehen. Gib es in SSMS und es funktioniert gut. –

+0

Tatsächlich ist es sogar dokumentiert. :) https://msdn.microsoft.com/en-us/library/ms188037.aspx –