我有一个用例,我的SQL脚本中有一个逗号分隔值的变量。
for
我必须对变量的所有值运行insert命令。用逗号分割并运行在abc.com上插入和在xyz.com上插入
有人可以建议最好的方法。我是SQL的新手。
我正在使用SQL Server 2014。
答案 0 :(得分:2)
试试这个:
declare @whitelistURL varchar(100) = 'abc.com,xyz.com,xyz.com,'
--set @whitelistURL = @whitelistURL + ','
;with cte as(
select charindex(',', @whitelistURL) [n], SUBSTRING(@whitelistURL, 1,
charindex(',', @whitelistURL) - 1) [url]
union all
select charindex(',', @whitelistURL, n + 1), SUBSTRING(@whitelistURL, n + 1, charindex(',', @whitelistURL, n + 1) - n - 1) from cte
where charindex(',', @whitelistURL, n + 1) > 0
)
select [url] from cte
唯一需要注意的是,处理后的字符串最后也应该包含分隔符(逗号),但如果没有,则只需添加它,就像我在注释行中所做的那样。
然后插入语句变得非常简单:
insert into MY_TABLE (url) values
select url from cte
答案 1 :(得分:1)
您可以使用自定义拆分功能。网上有很多这些功能的实现,这是一个例子:
CREATE FUNCTION [dbo].[fn_Split] (@Text nvarchar(MAX), @Delim char(1))
RETURNS @Values TABLE (Value nvarchar(MAX))
AS
BEGIN
SET @Text = RTRIM(LTRIM(@Text))
DECLARE @chrind int
DECLARE @Piece nvarchar(100)
SELECT @chrind = 1
WHILE @chrind > 0
BEGIN
SELECT @chrind = CHARINDEX(@Delim, @Text)
IF @chrind > 0
SELECT @Piece = RTRIM(LTRIM(LEFT(@Text, @chrind - 1)))
ELSE
SELECT @Piece = RTRIM(LTRIM(@Text))
INSERT @Values(Value) VALUES(CAST(@Piece as varchar(100)))
SELECT @Text = RIGHT(@Text, LEN(@Text) - @chrind)
IF LEN(@Text) = 0 BREAK
END
RETURN
END
此功能有两个参数: