[英]While Loop and Split function in T-SQL
我有一個用例,其中我的SQL腳本有一個帶有逗號分隔值的變量。
whitelistURL = abc.com,xyz.com
我必須在變量的所有值上運行insert命令。 類似於用逗號分割,然后在abc.com 上運行insert,然后在xyz.com 上運行insert
有人可以建議最好的方法嗎? 我是SQL新手。
我正在使用SQL Server 2014。
嘗試這個:
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
您可以使用自定義拆分功能。 Web上有很多這些功能的實現,下面是一個示例:
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
此函數有兩個參數:
'abc.com,xyz.com,xyz.com,'
) ','
) 現在您有了split函數,可以像這樣使用它:
select [Value] from [dbo].[fn_Split]('abc.com,xyz.com',',')
這是此命令的輸出:
現在,您可以將其與insert
語句結合使用:
insert into YOUR_TABLE_NAME(YOUR_COLUMN_NAME)
select [Value] from [dbo].[fn_Split]('abc.com,xyz.com',',')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.