我有一个字段,用于存储出版物的逗号分隔ID。例如123456、2345678、123567、2345890等。当我从数据库中提取数据时,我将其放入json对象中,然后网页将循环这些值并显示数据。效果很好。
我想做的是向存储的proc发送一个数字,存储的proc将其从字符串中删除并将其保存回表中。例如最终用户使用出版物123567,现在想完成它,因此我想将其从字符串中删除,这样他们以后就看不到它了。我的数据库中有一个split函数,但是我不知道如何连接它以删除或重建没有发布ID的字符串。
我没有任何要显示的代码,因为我无所适从。我认为我需要传递整个字符串和ID。拆分字符串并循环每个值以重建一个新字符串,但请检查ID是否存在并跳过它。
这是最好的方法吗?
感谢您的帮助
作为工作的基础,我最终得到的是:
ALTER FUNCTION dbo.RemovePMID (
@S VARCHAR(MAX)
,@PMID VARCHAR(15)
)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @T VARCHAR(50)
DECLARE @W VARCHAR(50)
SET @T = ''
WHILE len(@S) > 0
BEGIN
SET @W = left(@S, charindex(',', @S + ',') - 1)
IF charindex(@W, + @PMID) = 0
SET @T = @T + ',' + @W
SET @S = stuff(@S, 1, charindex(',', @S + ','), '')
END
RETURN substring(@T, 2, len(@T) - 2)
END
GO
答案 0 :(得分:3)
不需要循环(请看一看Larnu对您的解析/拆分函数的建议)
话虽如此,请考虑以下内容
示例
Declare @S varchar(max) = '123456,2345678,123567,2345890'
Declare @Zap varchar(50)='123456'
Select reverse(stuff(reverse(stuff(replace(','+@S+',',','+@Zap+',',','),1,1,'')),1,1,''))
返回
2345678,123567,2345890