2010-07-07 3 views
1

Dites que j'ai cette requête géniale dans ma procédure stockée.Comment stocker les résultats d'une requête dans une procédure stockée

Select * from Temp 

Comment pourrais-je stocker les résultats de ce dans la même procédure stockée puisque dans la ligne suivante, je veux passer par là dans une boucle (je ne sais pas comment faire encore non plus) et faire des choses à lui.

J'ai trouvé quelque chose comme ça

DECLARE total_count INT DEFAULT 0 
SET total_count = 10; 

mais il semble que cela ne fonctionne pas.

Msg 156, Level 15, State 1, Procedure csp_test, Line 3 
Incorrect syntax near the keyword 'DECLARE'. 
Msg 155, Level 15, State 2, Procedure csp_test, Line 3 
'INT' is not a recognized CURSOR option. 

Modifier

Ok ce que je vais jusqu'à présent. Je n'ai aucune idée de ce que je fais donc je ne sais pas si c'est à distance.

set ANSI_NULLS ON 
set QUOTED_IDENTIFIER ON 
go 


ALTER PROCEDURE [dbo].[csp_test] 
AS 
BEGIN 

declare @temp2 table (
    idx int identity(1,1), 
    field varchar(max)) 

insert into @temp2 (field) 
Select * from temp 


END 

donc ce que je pense que ce fait est une variable il fait table insère alors tous mes résultats de la table temporaire dans cette variable de table temp2. Ensuite, je boucle à travers eux ou quelque chose comme ça?

Je ne sais pas si ce que j'ai est déjà juste. je trouve cela et ne sais pas si ce serait la prochaine étape

declare @counter int 

set @counter = 1 

while @counter < (select max(idx) from @temp) 
begin 
    -- do what you want with the rows here 
    set @counter = @counter + 1 
end 

Temp script de table

USE [test] 
GO 
/****** Object: Table [dbo].[temp] Script Date: 07/06/2010 19:20:34 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 
CREATE TABLE [dbo].[temp](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [temp] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
CONSTRAINT [PK_temp] PRIMARY KEY CLUSTERED 
(
    [id] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 

GO 
SET ANSI_PADDING OFF 

Répondre

0

Ceci est un modèle pratique pour créer une table temporaire, le remplissage avec des données, puis déplacez le curseur dans les données pour une raison quelconque

-- create temp table 
CREATE TABLE #tmp (field1 int, field2 varchar(10)) ON [PRIMARY] 

-- populate temp table 
insert into #tmp (field1, field2) 

select something1, something2 
from someTable 

-- variables for cursor through temp table 
declare @field1 int 
declare @field2 varchar(10) 

-- open cursor 
declare myCursor Cursor for select field1, field2 from #tmp 
open myCursor 

-- get 1st row of data 
fetch next from myCursor into @field1, @field2 

-- loop through the data 
while @@fetch_status = 0 begin 
     -- do sumthin.. data is in @field1 and @field2 
     -- get next row 
     fetch next from myCursor into @field1, @field2 
end 

-- get rid of cursor 
close myCursor 
deallocate myCursor 

-- drop temp table 
drop table #tmp 
2
--Variable table @table 
declare @table as Table (int i, ...) 

insert into @table 
Select * from Temp 

ou

--Temporary table #temp 
create table #temp (int i, ...) 

insert into #table 
Select * from Temp 

--Use it 

--Finally 
drop table #temp 

Qu'est-ce que vous avez trouvé devrait être:

DECLARE @total_count INT DEFAULT 0 
SET @total_count = 10; 

variables commence par @

Pour plus d'infos sur les différences que j'ai trouvé ce article et un stackoverflow question.

+0

comme john écrire: vous devez déclarer la table et enregistrer des données dans int vous pouvez aussi check this http://odetocode.com/code/365.aspx –

+0

Donc je dois faire une table interne puis m'en débarrasser? Votre première façon de ne pas le laisser tomber. Est-ce que ça tombe automatiquement? Comment faire une boucle sur les résultats s'il y a une autre table? – chobo2

+0

Les variables de tableau n'ont pas besoin d'être supprimées ou supprimées. Leurs ressources sont automatiquement nettoyées si elles sont créées dans la même procédure stockée (en sql2008 elles peuvent être passées en arguments, et je ne sais pas comment les ressources sont gérées ici). Et pour boucler déclarer un curseur comme ceci. DECLARE nom_curseur CURSOR POUR select_statement_using_temporary_table - Référence complète ici: http://technet.microsoft.com/es-es/library/ms180169.aspx – user347594

Questions connexes