我有一个存储过程,它接受VARCHAR(MAX)
类型的参数。该参数的字符串由逗号分隔,如
@test = 'test123,test456,test789';
基于该参数,我想生成多个插入语句。
我将使用此问题中定义的分割函数:Split string by comma in SQL Server 2008。
您能告诉我一个如何在用逗号分割字符串后生成插入的示例吗?
逻辑步骤应该是:
@test = 'test123,test456,test789';
split @test
use while or cursor ? (I don't know)
INSERT INTO X values ('test123')
INSERT INTO X values ('test456')
...
答案 0 :(得分:2)
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
答案 1 :(得分:1)
尝试以下它会帮助你...
在这里,您不需要任何用户定义的功能....您只需使用以下代码并获得结果......
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
答案 2 :(得分:0)
您可以动态地动态创建SQL语句,然后运行该命令。实际上循环它不是必须的。此脚本在一个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
此外,您还可以使用动态管理功能选项sys.dm_fts_parser
SELECT FULLTEXTSERVICEPROPERTY ('IsFulltextInstalled')
0 =未安装全文。 1 =已安装全文。 NULL =输入无效或错误。
如果0 =未安装全文,则此帖子对您How to install fulltext on sql server 2008?
是必要的DECLARE @test nvarchar(100) = 'test123,test456,test789';
INSERT [dbo].[test2]
SELECT display_term
FROM sys.dm_fts_parser('"' + @test + '"', 1033, NULL, 0)
答案 3 :(得分:-1)
此查询将拆分字符串,然后循环结果以构造插入注释。
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