Как сохранить результаты запроса в то время как в хранимой процедуре

Скажите, что у меня есть этот большой запрос в моей хранимой процедуре.

Select * from Temp

Как я сохранил бы результаты этого в той же хранимой процедуре с тех пор в следующей строке, я хочу пройти ее в цикле (я не знаю, как сделать это уже любой), и действительно наполните к ней.

Я нашел что-то вроде этого

 DECLARE total_count INT DEFAULT 0
 SET total_count = 10; 

но это походит, который не работает.

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.

Править

Хорошо это - то, что я иду до сих пор. У меня нет подсказки, что я делаю так, я не знаю, удаленно ли это правильно.

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

Таким образом, то, Что я думаю, что это делает, является этим, делает некоторую табличную переменную, затем вставляет все мои результаты временной таблицы в эту temp2 табличную переменную. Затем я циклично выполняюсь через них или что-то как этот?

Я не делаю, если то, что я имею, до сих пор правильно. Я затем нашел это и не уверенным, если это будет следующим шагом

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

Временный сценарий Таблицы

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
1
задан chobo2 7 July 2010 в 02:20
поделиться

2 ответа

Это удобный шаблон для создания временной таблицы, заполнения данными, а затем перемещения по данным по какой-то причине

-- 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
0
ответ дан 2 September 2019 в 23:14
поделиться
--Variable table @table
declare @table as Table (int i, ...)

insert into @table
Select * from Temp

или

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

insert into #table
Select * from Temp

--Use it

--Finally
drop table #temp 

То, что вы нашли, должно быть:

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

Переменные начинаются с @

Для информации о различиях я нашел эту статью и вопрос stackoverflow.

2
ответ дан 2 September 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: