Eigentlich möchte ich mehrere Zeilen in eine Tabelle einfügen. Die Struktur der Tabelle ist
Create Table tbl_username
(id int autoincrement,
username varchar(100),
Primary key(id))
Und ich habe versucht, mehrere Zeilen wie einzufügen
Declare @s as varchar(100)
set @s='(''name1''),(''name2'')'
insert into tbl_username(username)values @s;
Aber ich bekomme die Ausgabe als
id username
1 (''name1''),(''name2'')
Eigentlich ist die erforderliche Ausgabe für mich
id username
1 name1
2 name2
Wie kann ich das erreichen?
3 Antworten
Verwenden Sie dynamisches SQL
Declare @s as varchar(100)
Declare @sql as varchar(max)
set @s='(''name1''),(''name2'')'
set @sql = 'insert into tbl_username(username) values ' + @s;
execute(@sql);
Allerdings würde ich dynamisches SQL nach Möglichkeit vermeiden. Die Standardmethode, wenn Ihre Werte nicht in einer Variablen enthalten sind, lautet:
INSERT INTO tbl_username(username) values ('name1'),('name2')
Oder
INSERT INTO tbl_username(username) values ('name1')
INSERT INTO tbl_username(username) values ('name2')
Wenn möglich, wählen Sie eine der oben genannten Optionen anstelle der ursprünglich erwähnten dynamischen Option.
insert into tbl_username(username)values ('name1'),('name2'),.....;
Da der Benutzername vom Typ varchar ist, wird @s als Einzelwert betrachtet und in eine Zeile eingefügt.
Die folgende Logik verwendet die Funktion substring
:
DECLARE @s as varchar(100), @Delimiter VARCHAR(1)
SET @s = 'name1,name2'
SET @Delimiter = ','
DECLARE @Position INT, @ListItem VARCHAR(MAX)
WHILE CHARINDEX(@Delimiter, @s) > 0
BEGIN
SELECT @Position = CHARINDEX(@Delimiter, @s)
SELECT @ListItem = SUBSTRING(@s, 1, @Position-1)
INSERT INTO tbl_username
SELECT @ListItem
SELECT @s = SUBSTRING(@s, @Position+1, LEN(@s)-@Position)
END
INSERT INTO tbl_username
Select @s
SELECT * FROM tbl_username
Bitte versuchen Sie: http://sqlfiddle.com/#!6/d0f76/1/0
Neue Fragen
sql
Structured Query Language (SQL) ist eine Sprache zum Abfragen von Datenbanken. Zu den Fragen sollten Codebeispiele, Tabellenstruktur, Beispieldaten und ein Tag für die verwendete DBMS-Implementierung (z. B. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 usw.) gehören. Wenn sich Ihre Frage ausschließlich auf ein bestimmtes DBMS bezieht (bestimmte Erweiterungen / Funktionen verwendet), verwenden Sie stattdessen das Tag dieses DBMS. Antworten auf mit SQL gekennzeichnete Fragen sollten ISO / IEC-Standard-SQL verwenden.