在sql server存储过程中创建和循环列表
问题描述:
有没有办法使用T-SQL在sql server存储过程中声明项目列表,然后遍历项目?在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。'
我知道我们可以在存储过程中创建一个表。这是做这种事的最好方法吗?
答
您有几种选择。 OMG小马是其中之一。您也可以使用表变量(@)或临时表(#)。 @和#之间的主要区别在于@表是一个变量并将信息存储在内存中,而#表将其存储在临时数据库中(如果两个或多个sp副本在同一时间)。你会发现如果你的表格比几十条记录大,@表格可能会变慢。这是因为它的存储方式。请阅读Stackoverflow的this了解更多信息。此外,您可以使用while循环,但如果您计划在临时表中有大量列,我将使用游标,请阅读msdn article以获取更多信息。游标还可以让你在桌面上轻松地来回移动。另外,如果你想让它们变快,只需使用FAST FORWARD选项,这使得它们大致和SQL中的WHILE循环一样快。
答
用途:
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