0

我有一个 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,

现在我想为表格的每一行调用这个过程。
这是可能的?

4

2 回答 2

3

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

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

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

于 2013-01-29T16:39:50.567 回答
1

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

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

这也应该有所帮助:

http://msdn.microsoft.com/en-us/library/ms180169.aspx

祝你好运。

于 2013-01-29T16:39:25.390 回答