如何在SQL Server中声明数组变量?

11

我希望在存储过程中执行一个查询,该查询应循环处理所有数组值。

例如:

declare arrayStoreID={1001,2400,2001,5000}

for(int i=0;i<arrayStoreID.length;i++)
{
    select 
        col_name1,col_name2
    into
        @temp_table
    from
        Table_Name
    Where 
        storeID=arrayStoreID[i]
}
我希望像上面那样表现。谢谢。

I want to perform like above. Thanks


3
SQL Server 不支持数组。 - user330315
2
我认为在这里可以使用简单的“IN”而不是循环,'... FROM Table_Name WHERE storeID IN (1001,2400,2001,5000)'。 - Abdul Rasheed
2
@a_horse_with_no_name 还有其他方法吗? - mohamed faisal
1
@AbdulRasheed 不,我的实际情况不是那样的。 - mohamed faisal
3
可能是 如何在 SQL Server 存储过程中声明数组? 的重复问题。 - Shakeer Mirza
显示剩余3条评论
5个回答

13

首先将店铺ID存储在以下临时表中:

create table #Table_Name(storeID INT, col_name1 varchar(50), col_name2 varchar(50))
insert into #Table_Name values
(1001, 'Test1', 'Test2'),
(5000, 'Rest1', 'Rest2'),
(1122, 'Best1', 'Best2')

接下来,您可以按照以下方法加入要提取记录的表,如果您的需求在现实中不是更加复杂,则此方法比通过loop进行操作要好得多。

select t.col_name1,
    t.col_name2
INTO #new_table
from #Table_Name t
inner join #tmp_ids ti on ti.id = t.storeID

它将返回与“IDs”匹配并插入到上面的“#new_table”中的两条记录。
select * from #new_table

OUTPUT:
col_name1   col_name2
Test1       Test2
Rest1       Rest2

Note: you can use `table variable` as well

3

Array 对象在 Sql Server 中不存在。

您可以按以下步骤创建临时表:

CREATE TABLE #mytemp (<list of field>)

这里是您可以存储信息的地方。

您可以执行JOIN操作并将其与其他表一起使用,或者如果您想创建循环,可以定义一个CURSOR以处理临时表中的每一行。


1
不是这样的,我的情况不同。链接。这个链接怎么样? - mohamed faisal
1
@mohamedfaisal:亲爱的,在你提供的链接中,使用临时表模拟了数组的创建(解决方案1)。如果你在问题中添加你的目标,我可以帮你编写一个解决方案。 - Joe Taras

3

使用IN子句。

您无需循环或临时表来传递storeID。在IN子句中传递storeID列表即可。

 select 
        col_name1,col_name2
    into
        #temp_table -- cannot use @table here
    from
        Table_Name
    Where 
        storeID in (1001,2400,2001,5000)

1
不,SQL Server中没有ARRAY变量。 不,SQL Server中没有FOR循环。 只有CURSOR和While循环。

0

你可以使用cursor属性

declare @col_name1 type,@col_name2 type
declare crsr cursor for select  col_name1,col_name2 from Table_Name Where storeID in (1001,2400,2001,5000)
open crsr
fetch next from crsr into @col_name1,@col_name2 
while @@fetch_status=0
begin
    insert into @temp_table(col_name1,col_name2) values (@col_name1,@col_name2)
end
close crsr
deallocate crsr

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