Sql 如何为每行调用过程?

Sql 如何为每行调用过程?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个Microsoft SQL Server R2 2008。这是我有生以来第一次看到它。 我有一个sql过程: DECLARE @RC int DECLARE @Id uniqueidentifier DECLARE @Segment_ID uniqueidentifier DECLARE @SDate datetime DECLARE @EDate datetime DECLARE @withBig bit DECLARE @withKm bit DECLARE @withGeo bit

我有一个Microsoft SQL Server R2 2008。这是我有生以来第一次看到它。
我有一个sql过程:

DECLARE @RC int
DECLARE @Id uniqueidentifier
DECLARE @Segment_ID uniqueidentifier
DECLARE @SDate datetime
DECLARE @EDate datetime
DECLARE @withBig bit
DECLARE @withKm bit
DECLARE @withGeo bit
DECLARE @withDescr bit

-- TODO: задайте здесь значения параметров.

EXECUTE @RC = [Request_BusStation] 
   @Id
  ,@Segment_ID
  ,@SDate
  ,@EDate
  ,@withBig
  ,@withKm
  ,@withGeo
  ,@withDescr
GO
我如何理解它只是程序的调用,而不是自身。但程序太小,无法复制到这里。 还有一张桌子:

   CREATE TABLE [BusStation](
[Id] [uniqueidentifier] NOT NULL,
[Segment_ID] [uniqueidentifier] NOT NULL,
[Dist] [decimal](18, 4) NOT NULL,
[Kod_Spr012] [smallint] NOT NULL,
[Square] [decimal](18, 6) NULL,
[OperationStartDate] [date] NULL,
[BallanceCost] [decimal](18, 6) NULL,
[DepreciatedCost] [decimal](18, 6) NULL,
[ChargesNorm] [decimal](18, 6) NULL,
[DocumentName] [varchar](100) NULL,
[DocumentNum] [varchar](100) NULL,
[DocumentDate] [date] NULL,
[Authority] [varchar](100) NULL,
[Kod_Spr091] [smallint] NOT NULL,
[HasWaysideStop] [bit] NOT NULL,
[HasLanding] [bit] NOT NULL,
[HasSpeedTransitArea] [bit] NOT NULL,
[LenSpeedTransitArea] [decimal](18, 6) NULL,
[YearBuilt] [smallint] NULL,
[YearMajorOverhaul] [smallint] NULL,
[Kod_Spr019] [smallint] NOT NULL,
[TechCond] [varbinary](max) NULL,
[LandCont] [varbinary](max) NULL,
[LandContDate] [date] NULL,
[LandContStartDate] [date] NULL,
[LandContEndDate] [date] NULL,
[Kod_Spr120] [smallint] NULL,
[E_Date_Begin] [datetime] NOT NULL,
[E_Date_End] [datetime] NULL,
[E_Date_Stop] [datetime] NULL,
现在,我想为表的每一行调用此过程。

这是可能的?

正如我在评论中提到的,我唯一知道如何做到这一点的方法是使用
光标。下面是一些示例代码(当然未经测试):

这也有助于:


祝你好运。

正如我在评论中提到的,我唯一知道如何做到这一点的方法就是使用
光标。下面是一些示例代码(当然未经测试):

这也有助于:


祝您好运。

是的,您可以使用光标选择表中的所有行并迭代调用存储过程

我建议你在走那条路线之前可能会遇到设计问题。如果需要为表中的每一行调用存储过程,则可以编写一个存储过程,该存储过程只对所有行执行当前sp所执行的操作,而不是执行单行操作


您没有提供sp正在做什么,因此我只能在这里推测。

是的,您可以使用光标选择表中的所有行并迭代调用存储过程

我建议你在走那条路线之前可能会遇到设计问题。如果需要为表中的每一行调用存储过程,则可以编写一个存储过程,该存储过程只对所有行执行当前sp所执行的操作,而不是执行单行操作


您没有提供sp正在做什么,因此我只能在这里推测。

我认为您需要声明一个游标(尽管我非常讨厌它们)。循环查看您的所有记录并致电SP@sgedes:谢谢。但是你能给我举个例子吗?如果你没有在你的过程中执行
insert/update/delete
,你可以使用
函数来执行,而不需要使用游标。你能展示一下你的过程吗?我想你需要声明一个游标(尽管我讨厌它们)。循环查看您的所有记录并致电SP@sgedes:谢谢。但是你能给我举个例子吗?如果你没有在你的过程中执行
insert/update/delete
,你可以使用
函数来执行,而不需要使用游标。你能展示一下你的程序吗?谢谢)。但我有最后一个问题,我可以在调用过程中创建游标(在代码段中,我在问题中提到了什么),或者我将在过程中创建游标?您可以在上面的代码中创建游标--更改我在@PRINT中的位置。。。到您的Execute语句。祝你好运,对不起,我太笨了。你的代码工作得很好。我想要的。^谢谢)。但我有最后一个问题,我可以在调用过程中创建游标(在代码段中,我在问题中提到了什么),或者我将在过程中创建游标?您可以在上面的代码中创建游标--更改我在@PRINT中的位置。。。到您的Execute语句。祝你好运,对不起,我太笨了。你的代码工作得很好。我想要什么^__^
DECLARE @ID INT
DECLARE @Segment_ID uniqueidentifier

DECLARE @getAccountID CURSOR
SET @BusStationCursor = CURSOR FOR
SELECT Id, Segment_ID --(etc: all the fields you need)
FROM BusStation

OPEN @BusStationCursor
FETCH NEXT    FROM @BusStationCursor INTO @ID, @Segment_ID
WHILE @@FETCH_STATUS = 0
BEGIN

--CALL YOUR SP HERE
PRINT @ID 
PRINT @Segment_ID

FETCH NEXT    FROM @BusStationCursor INTO @ID, @Segment_ID
END
CLOSE @BusStationCursor
DEALLOCATE @BusStationCursor