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?

4
vineeth 30 Dez. 2015 im 08:46

3 Antworten

Beste Antwort

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.

6
Lock 30 Dez. 2015 im 21:35
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.

4
Mukund 30 Dez. 2015 im 05:55

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

2
Bala Sakthis 30 Dez. 2015 im 06:00