在sql server存储过程中创建并循环遍历列表

时间:2010-01-19 21:47:52

标签: sql sql-server tsql

有没有办法使用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 个答案:

答案 0 :(得分:3)

您有几个选择。 OMG小马是一个。您还可以使用表变量(@)或临时表(#)。 @和#之间的主要区别在于@表是一个变量并将信息存储在内存中,而#表将它存储在临时数据库中(如果sp的两个或多个副本运行,则允许重复的表)同一时间)。您会发现,如果您的表格大于几十条记录,那么@ table可能会变慢。这是因为它的存储方式。从Stackoverflow中读取this以获取更多信息。此外,您可以使用while循环,但如果您计划在临时表中有大量列,我将使用游标,请阅读msdn article以获取更多信息。游标还允许您在桌面中轻松来回移动。此外,如果您希望它们快速,只需使用FAST FORWARD选项,这使它们大致与SQL中的WHILE循环一样快。

答案 1 :(得分: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

答案 2 :(得分:1)

看一下Arrays and Lists in SQL Server不知道你有哪个版本的SQL服务器,所以从那个适用于你的页面选择一个

顺便提一下你的问题,你可以用''

替换并替换输入字符

答案 3 :(得分:1)

您可以使用table variable临时存储一组数据。