Sql 在存储过程中拆分后生成insert语句
我有一个存储过程,它接受类型为Sql 在存储过程中拆分后生成insert语句,sql,sql-server-2008,stored-procedures,Sql,Sql Server 2008,Stored Procedures,我有一个存储过程,它接受类型为VARCHAR(MAX)的参数。该参数包含由逗号分隔的字符串,如 @test = 'test123,test456,test789'; 基于该参数,我想生成多个insert语句 我将使用此问题中定义的拆分函数: 你能给我举个例子,在用逗号分割字符串后如何生成插入吗 逻辑步骤应如下所示: @test = 'test123,test456,test789'; split @test use while or cursor ? (I don't know) INSERT
VARCHAR(MAX)
的参数。该参数包含由逗号分隔的字符串,如
@test = 'test123,test456,test789';
基于该参数,我想生成多个insert语句
我将使用此问题中定义的拆分函数:
你能给我举个例子,在用逗号分割字符串后如何生成插入吗
逻辑步骤应如下所示:
@test = 'test123,test456,test789';
split @test
use while or cursor ? (I don't know)
INSERT INTO X values ('test123')
INSERT INTO X values ('test456')
...
您可以动态地创建SQL语句,然后运行该命令。实际上,循环对您来说并不是必需的。此脚本在一个INSERT语句中提供多个INSERT
DECLARE @test nvarchar(100) = 'test123,test456,test789';
DECLARE @dml nvarchar(max) = N''
SET @dml = 'INSERT [dbo].[test2] VALUES' + '(''' + REPLACE(@test, ',', '''),(''') + ''')'
EXEC sp_executesql @dml
您还可以使用带有动态管理功能的选项
0=未安装全文。1=已安装全文。NULL=无效输入或错误
如果未安装0=全文,则此帖子对您是必需的
此查询将拆分字符串,然后循环结果以构造插入注释
declare @test varchar(30) = 'test123,test456,test789';
-- retrieve number of comma(s) in @test
declare @i int = len(@test) - len(replace(@test,',','')) + 1
declare @cmd nvarchar(255)
-- loop
while @i >= 0
begin
select @cmd = 'INSERT INTO X VALUES (''' + parsename(replace(@test, ',', '.'), @i) + ''');';
-- execute sql
exec sp_executesql @cmd
set @i = @i - 1
end
试着像下面一样,它会帮助你 这里您不需要任何用户定义的函数。。。。您只需使用下面的代码并获得结果
DECLARE @test NVARCHAR(MAX)
SET @test = 'test123,test456,test789'
SET @test = ',' + @test + ','
DECLARE @Part NVARCHAR(MAX)
DECLARE @INDEX INT
SET @INDEX = CHARINDEX(',',@test)
DECLARE @EIND INT set @EIND = 0
WHILE(@INDEX != LEN(@test))
BEGIN
SET @EIND = ISNULL(((CHARINDEX(',', @test, @INDEX + 1)) - @INDEX - 1), 0)
INSERT INTO X SELECT (SUBSTRING(@test, (@INDEX + 1), @EIND)) -- Insert Comes Here
SELECT @INDEX = ISNULL(CHARINDEX(',', @test, @INDEX + 1), 0)
END
如果列表中的项目数超过四个,则此操作将失败。
DECLARE @id VARCHAR(MAX)
SET @id = 'test123,test456,test789,'
WHILE CHARINDEX(',', @id) > 0
BEGIN
DECLARE @tmpstr VARCHAR(50)
SET @tmpstr = SUBSTRING(@id, 1, ( CHARINDEX(',', @id) - 1 ))
INSERT INTO X
VALUES (
@tmpstr
)
SET @id = SUBSTRING(@id, CHARINDEX(',', @id) + 1, LEN(@id))
END
declare @test varchar(30) = 'test123,test456,test789';
-- retrieve number of comma(s) in @test
declare @i int = len(@test) - len(replace(@test,',','')) + 1
declare @cmd nvarchar(255)
-- loop
while @i >= 0
begin
select @cmd = 'INSERT INTO X VALUES (''' + parsename(replace(@test, ',', '.'), @i) + ''');';
-- execute sql
exec sp_executesql @cmd
set @i = @i - 1
end
DECLARE @test NVARCHAR(MAX)
SET @test = 'test123,test456,test789'
SET @test = ',' + @test + ','
DECLARE @Part NVARCHAR(MAX)
DECLARE @INDEX INT
SET @INDEX = CHARINDEX(',',@test)
DECLARE @EIND INT set @EIND = 0
WHILE(@INDEX != LEN(@test))
BEGIN
SET @EIND = ISNULL(((CHARINDEX(',', @test, @INDEX + 1)) - @INDEX - 1), 0)
INSERT INTO X SELECT (SUBSTRING(@test, (@INDEX + 1), @EIND)) -- Insert Comes Here
SELECT @INDEX = ISNULL(CHARINDEX(',', @test, @INDEX + 1), 0)
END