通过变量插入多行
Inserting multiple rows through a variable
其实我想插入多行到table。
table 的结构是
Create Table tbl_username
(id int autoincrement,
username varchar(100),
Primary key(id))
我尝试插入多行,例如
Declare @s as varchar(100)
set @s='(''name1''),(''name2'')'
insert into tbl_username(username)values @s;
但我得到的输出是
id username
1 (''name1''),(''name2'')
实际上我需要的输出是
id username
1 name1
2 name2
我怎样才能做到这一点?
使用动态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);
不过,我会尽可能避免动态 SQL。
如果您的值不在变量中,标准方法是:
INSERT INTO tbl_username(username) values ('name1'),('name2')
或者
INSERT INTO tbl_username(username) values ('name1')
INSERT INTO tbl_username(username) values ('name2')
如果可能,请选择上述之一,而不是最初提到的动态选项。
insert into tbl_username(username)values ('name1'),('name2'),.....;
这里因为username是varchar类型所以把@s当做单值插入一行
以下逻辑利用了 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
其实我想插入多行到table。 table 的结构是
Create Table tbl_username
(id int autoincrement,
username varchar(100),
Primary key(id))
我尝试插入多行,例如
Declare @s as varchar(100)
set @s='(''name1''),(''name2'')'
insert into tbl_username(username)values @s;
但我得到的输出是
id username
1 (''name1''),(''name2'')
实际上我需要的输出是
id username
1 name1
2 name2
我怎样才能做到这一点?
使用动态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);
不过,我会尽可能避免动态 SQL。 如果您的值不在变量中,标准方法是:
INSERT INTO tbl_username(username) values ('name1'),('name2')
或者
INSERT INTO tbl_username(username) values ('name1')
INSERT INTO tbl_username(username) values ('name2')
如果可能,请选择上述之一,而不是最初提到的动态选项。
insert into tbl_username(username)values ('name1'),('name2'),.....;
这里因为username是varchar类型所以把@s当做单值插入一行
以下逻辑利用了 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