在 SQL Server 存储过程中创建并循环遍历列表

3

有没有一种方法可以使用T-SQL在SQL Server存储过程中声明一个项目列表,然后循环遍历这些项目?

我想做这样的事情:

input_string = 'my dog has fleas.'
list_remove = 'a', 'e', 'i', 'o', 'u'

for each item in list remove
    input_string = replace(input_string, item, '')
end

最终的input_string将会是'my dg hs fls.'

我知道我们可以在存储过程中创建表格。但这是否是做这件事情的最佳方法呢?

4个回答

4
您有几个选项。其中一个是OMG Ponies。您还可以使用表变量(@)或临时表(#)。 @表的主要区别是,@表是一个变量,并将信息存储在内存中,而#表将其存储在临时数据库中(以一种允许重复项的方式,如果同时运行2个或多个副本,则会出现这种情况)。如果您的表大于几十条记录,则会发现@表可能会变慢。这是因为它的存储方式。阅读来自Stackoverflow的此文章以获取更多信息。此外,您可以使用while循环,但是如果计划在临时表中拥有大量列,则应使用游标,请阅读msdn文章以获取更多信息。游标还允许您轻松地在表中前后移动。此外,如果您希望它们快速,请使用FAST FORWARD选项,使它们大致与SQL中的WHILE循环一样快。

2

使用:

DECLARE @input_string NVARCHAR(25)
DECLARE @ascii INT

SET @input_string = 'my dog has fleas.'
SET @ascii = 97

-- 97, 101, 105, 111, 117

WHILE @ascii <= 117
BEGIN

  SET @input_string = REPLACE(@input_string, CHAR(@ascii), '')

  SET @ascii = CASE @ascii 
                 WHEN 97 THEN 101
                 WHEN 101 THEN 105
                 WHEN 105 THEN 111
                 WHEN 111 THEN 117
               END
END

PRINT @input_string

1

看一下SQL Server中的数组和列表 不知道你使用的是哪个版本的SQL服务器,所以选择适用于你的那一个版本

顺便说一下,对于你的问题,你可以直接用replace函数将输入字符替换为''


1

你可以使用表变量来暂时存储一组数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接