【问题标题】:Creating and looping through a list in an sql server stored procedure在 sql server 存储过程中创建和循环列表
【发布时间】:2010-01-20 07:01:38
【问题描述】:

有没有办法使用 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 将是“我的 dg hs fls”。

我知道我们可以在存储过程中创建一个表。这是做这种事情的最好方法吗?

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    您有几个选择。 OMG 小马就是其中之一。您还可以使用表变量 (@) 或临时表 (#)。 @ 和 # 之间的主要区别在于 @ 表是一个变量并将信息存储在内存中,而 # 表将其存储在临时数据库中(如果 2 个或多个 sp 副本在同时)。你会发现如果你的表大于几十条记录,@表可能会变慢。这是因为它的存储方式。阅读来自 Stackoverflow 的 this 了解更多信息。此外,您可以使用 while 循环,但如果您计划在临时表中有大量列,我会使用游标,请阅读 msdn article 了解更多信息。光标还允许您在表格中轻松地来回移动。此外,如果您希望它们更快,只需使用 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
      

      【讨论】:

        【解决方案3】:

        看看Arrays and Lists in SQL Server不知道你有什么版本的SQL服务器,所以从那个页面中选择一个适合你的版本

        顺便说一句,对于您的问题,您可以进行替换并将输入字符替换为 ''

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多