CREATE PROC dbo.GEX_CALCSALARY_STEP1 ( @P1 VARCHAR(100), @P2 VARCHAR(100), @P3 VARCHAR(100), @P4 VARCHAR(100), @P5 VARCHAR(100), @P6 VARCHAR(100), @P7 VARCHAR(100), @P8 VARCHAR(100), @P9 VARCHAR(100), @P10 VARCHAR(100), @P11 VARCHAR(100), @P12 VARCHAR(100), @LOGINID VARCHAR(30) ) /* Function : 將薪資變數, 執行後填入暫存檔備用 ESS_TMPC1 LOGINID,VARID,PERSONID,RESULT_VALUE Description: 被主程序 GEX_CALCSALARY 呼叫 Build Date : 2013/05/23 Modify History Item Who Date Modify Docs ==== ========== ========== ================================================ */ AS --0.預設值整理 IF @P1 = '*' SET @P1 = '' IF @P2 = '*' SET @P2 = 'zzzzzz' IF @P3 = '*' SET @P3 = '' IF @P4 = '*' SET @P4 = 'zzzzzz' IF @P7 = '*' SET @P7 = dbo.CALC_YEARMONTH(@P5) IF @P8 = '*' SET @P8 = '0' --1.整理暫存檔 ESS_TMPC1 LOGINID,VARID,PERSONID,RESULT_VALUE DECLARE @CNT INT DECLARE @SQL NVARCHAR(2000) SELECT @CNT=COUNT(*) FROM SYSOBJECTS WHERE NAME='ESS_TMPC1' IF @CNT <= 0 BEGIN SET @SQL = 'CREATE TABLE ESS_TMPC1 ( ' + ' LOGINID VARCHAR(30), ' + ' VARID VARCHAR(30), ' + ' PERSONID VARCHAR(20), ' + ' RESULT_VALUE decimal(18,6) DEFAULT (0) ' + ')' EXECUTE SP_EXECUTESQL @SQL END --計算前先刪除原資料 DELETE FROM ESS_TMPC1 WHERE LOGINID = @LOGINID --計算薪資變數的值, 並寫到暫存檔 DECLARE @USERDEFID VARCHAR(60) DECLARE @SQLSTR NVARCHAR(2000) DECLARE @SQL1 NVARCHAR(2000) DECLARE contact_cursor2 CURSOR FOR SELECT USERDEFID,SQLSTR FROM ESSUSERDEF ORDER BY 1 OPEN contact_cursor2 -- Perform the first fetch. FETCH NEXT FROM contact_cursor2 INTO @USERDEFID,@SQLSTR -- Check @@FETCH_STATUS to see if there are any more rows to fetch. WHILE @@FETCH_STATUS = 0 BEGIN SET @SQL1=@SQLSTR --SET @SQL1=REPLACE(@SQL1, '@P10', CHAR(39)+@P10+CHAR(39)) SET @SQL1=REPLACE(@SQL1, '@P11', CHAR(39)+@P11+CHAR(39)) SET @SQL1=REPLACE(@SQL1, '@P12', CHAR(39)+@P12+CHAR(39)) SET @SQL1=REPLACE(@SQL1, '@P1', CHAR(39)+@P1+CHAR(39)) SET @SQL1=REPLACE(@SQL1, '@P2', CHAR(39)+@P2+CHAR(39)) SET @SQL1=REPLACE(@SQL1, '@P3', CHAR(39)+@P3+CHAR(39)) SET @SQL1=REPLACE(@SQL1, '@P4', CHAR(39)+@P4+CHAR(39)) SET @SQL1=REPLACE(@SQL1, '@P5', CHAR(39)+@P5+CHAR(39)) SET @SQL1=REPLACE(@SQL1, '@P6', CHAR(39)+@P6+CHAR(39)) SET @SQL1=REPLACE(@SQL1, '@P7', CHAR(39)+@P7+CHAR(39)) SET @SQL1=REPLACE(@SQL1, '@P8', CHAR(39)+@P8+CHAR(39)) --SET @SQL1=REPLACE(@SQL1, '@P9', CHAR(39)+@P9+CHAR(39)) SET @SQL1=REPLACE(@SQL1, '@LOGINID', CHAR(39)+@LOGINID+CHAR(39)) --利用暫存檔轉入 CREATE TABLE #TMP99 (PERSONID varchar(30), CALCDATA DECIMAL(18,6) ) INSERT INTO #TMP99 EXECUTE SP_EXECUTESQL @SQL1 SET @SQL = 'INSERT INTO ESS_TMPC1 (LOGINID,VARID,PERSONID,RESULT_VALUE) ' + ' SELECT ' + CHAR(39)+@LOGINID+CHAR(39) + ',' + CHAR(39)+@USERDEFID+CHAR(39) + ',PERSONID,CALCDATA FROM #TMP99' EXECUTE SP_EXECUTESQL @SQL DROP TABLE #TMP99 FETCH NEXT FROM contact_cursor2 INTO @USERDEFID,@SQLSTR END --加入防錯 UPDATE ESS_TMPC1 SET RESULT_VALUE = 0 WHERE RESULT_VALUE IS NULL CLOSE contact_cursor2 DEALLOCATE contact_cursor2