web-dev-qa-db-fra.com

Comment déclarer une variable de tableau dans SQL Server?

Je veux exécuter une requête dans la procédure stockée, qui devrait boucler toutes les valeurs du tableau. 

Par exemple:

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

Je veux jouer comme ci-dessus. Merci

5
mohamed faisal

Premiers ID de magasin dans temporary table comme ci-dessous

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')

Ensuite, vous pouvez rejoindre la table à partir de laquelle vous voulez récupérer l’enregistrement comme ci-dessous, cette méthode est bien meilleure que de passer par la variable loop si votre exigence n'est pas more complicated en réel

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

Il renverra les deux enregistrements qui correspondent à IDs et qui sont insérés dans le fichier #new_table ci-dessus

select * from #new_table

OUTPUT:
col_name1   col_name2
Test1       Test2
Rest1       Rest2

Note: you can use `table variable` as well
7
Susang

utiliser la clause IN

Vous n'avez pas besoin de table de boucle ou temporaire pour transmettre storeID. Passer la liste de storeID's dans la clause IN

 select 
        col_name1,col_name2
    into
        #temp_table -- cannot use @table here
    from
        Table_Name
    Where 
        storeID in (1001,2400,2001,5000)
2
Pரதீப்

L'objet Array n'est pas présent dans Sql Server.

Vous pouvez créer une table temporaire, comme suit

CREATE TABLE #mytemp (<list of field>)

où vous pouvez stocker vos informations.

Vous pouvez effectuer une opération JOIN afin de l'utiliser avec d'autres tables ou, si vous souhaitez créer une boucle, vous pouvez définir un CURSOR pour traiter chaque ligne de votre table temporaire.

1
Joe Taras