2016-06-13 87 views
-5

我正在製作一個存儲過程來了解將要安排維護的未來日期,但桌面上有很多機器,但過程僅調用一個。如何使參數在存儲過程中讀取多個值?

的聲明,我使用的是它來調用每臺機器的數據並做週期要知道在給定的

@name varchar(50), 
       @FechaHasta datetime, 
       @Result  DATETIME = null OUTPUT) 
AS 

BEGIN 

DECLARE @JOBNO NVARCHAR(50) 
    SELECT @JOBNO = JOBNO FROM PMMASTER INNER JOIN LABORMP 
    ON PMMASTER.PMID = LABORMP.PMID INNER JOIN PMMSCHEDULE 
    ON PMMASTER.PMID = PMMSCHEDULE.PMID 
    where EMPLOYEENAME = @name AND PMMSCHEDULE.CYCLETYPE =2 and PMMSCHEDULE.SETTING2 IS NOT NULL and PMMSCHEDULE.SETTING1 IS NOT NULL 

    DECLARE @DATELAST DATETIME 
     SELECT @DATELAST = DATELAST FROM PMMSCHEDULE INNER JOIN PMMASTER 
     ON PMMASTER.PMID = PMMSCHEDULE.PMID INNER JOIN LABORMP 
     ON PMMASTER.PMID = LABORMP.PMID 
     WHERE JOBNO in (@JOBNO) and EMPLOYEENAME [email protected] 

    DECLARE @SETTING1 INT 
     SELECT @SETTING1 = SETTING1 FROM PMMSCHEDULE INNER JOIN PMMASTER 
     ON PMMASTER.PMID = PMMSCHEDULE.PMID INNER JOIN LABORMP 
     ON PMMASTER.PMID = LABORMP.PMID 
     WHERE JOBNO in (@JOBNO) AND EMPLOYEENAME = @name 

     DECLARE @SETTING2 INT 
     SELECT @SETTING2 = SETTING2 FROM PMMSCHEDULE INNER JOIN PMMASTER 
     ON PMMASTER.PMID = PMMSCHEDULE.PMID INNER JOIN LABORMP 
     ON PMMASTER.PMID = LABORMP.PMID 
     WHERE JOBNO in (@JOBNO) AND EMPLOYEENAME = @name 

DECLARE 
    @DateFirst INT 
SELECT @DateFirst = @@DateFirst 

/* Today */ 
DECLARE 
     @TodaysDate  DATETIME  
-- Finding today's date after resetting the time to midnight 
SELECT @TodaysDate = CONVERT(DATETIME, CONVERT(VARCHAR, GETDATE(), 101), 101) 

/* Todays WeekDay */ 
DECLARE 
    @TodaysWeekDay INT 
SELECT @TodaysWeekDay = DATEPART(dw, @TodaysDate) 

/* Selected WeekDay */ 
DECLARE 
    @WeekDay INT 
SELECT @WeekDay = CHARINDEX('1', @Setting2) 

/* Schedule Date */ 
DECLARE 
     @ScheduleDate DATETIME 
-- Find the starting schedule date. If the schedule date is in a previous 
-- week, adjust to the most recent week in the schedule 
SELECT @ScheduleDate = @DATELAST 

-- Adjust scheduled date to closest possible week day 
SELECT @ScheduleDate = DATEADD(dd, @WeekDay - DATEPART(dw, @ScheduleDate), @ScheduleDate) 

-- Add cycles until a possible date is met 
WHILE (@ScheduleDate < @TodaysDate) 
    SELECT @ScheduleDate = DATEADD(wk, @Setting1, @ScheduleDate) 

IF (@ScheduleDate <= @DATELAST) 
    SELECT @ScheduleDate = DATEADD(wk, @Setting1, @ScheduleDate) 

SELECT @Result = @ScheduleDate 

SELECT @Result AS RESULTADO 

SET DATEFIRST @DateFirst 


WHILE(@Result <@FechaHasta) 
    BEGIN 
     IF(@Result <@FechaHasta) 

      SELECT @Result = DATEADD(WK, @Setting1, @Result) 
      SET IDENTITY_INSERT [00TblFecha] ON 

      INSERT INTO dbo.[00TblFecha](idFecha,jobno,fecha)VALUES(3,@JOBNO,@Result) 

      SET IDENTITY_INSERT[00TblFecha] OFF  
      print @Result 
     end  
+0

因此,您發佈了一段包含while循環的文本。這裏真的有問題嗎?如果是這樣,你需要解釋你在問什麼。作爲一個方面說明,沒有理由需要使用這樣的插入while循環。 –

+0

對不起,我的問題是如何讓存儲過程使用多臺機器來實現循環? –

+0

這沒有任何意義。請記住,我們不知道你的系統,我們不知道你的項目是什麼,我們看不到你的屏幕。我們需要處理的是對這個問題的非常模糊的描述。 –

回答

0

範圍未來一段時間內,您有幾種選擇:
- 使用表值參數(https://msdn.microsoft.com/en-us/library/bb510489.aspx
- 使用XML參數
- 使用逗號分隔列表。
- 循環遍歷所有「機器」

順便說一句,排除SP中@@ DateFirst的使用。無論如何,你不使用它。

相關問題