Скажем, у меня есть этот замечательный запрос в моей хранимой процедуре.
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
Скрипт Temp 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