如何在SQL Server中声明Array变量?

时间:2017-01-16 08:07:13

标签: sql sql-server stored-procedures

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

例如:

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]
}

我想像上面那样表演。 感谢

3 个答案:

答案 0 :(得分:7)

temporary table中的第一个商店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,那么这种方法要比通过more complicated好得多

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

答案 1 :(得分:2)

使用IN子句。

您不需要循环或临时表来传递storeID。在storeID's子句

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

答案 2 :(得分:1)

Array对象在Sql Server中不存在。

您可以创建一个临时表,如下所示

CREATE TABLE #mytemp (<list of field>)

您可以存储信息。

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