mybatis
<update id="callDataSelfCheck_Win_MSSQL" parameterType="java.util.HashMap" statementType="CALLABLE">
{
call DATA_SELF_CHECK()
}
</update>
mssql
ALTER PROCEDURE [dbo].[DATA_SELF_CHECK]
AS
BEGIN
DECLARE @POST_THEME_SNO VARCHAR(10), @SELF_CHECK_SNO NUMERIC(9), @POST_TABLE VARCHAR(256), @ERROR_INFO VARCHAR(1024), @CHECK_CONDITION VARCHAR(2048)
--清除当天的记录
DELETE SELF_CHECK_RESULT WHERE CREATE_DATE = CONVERT(VARCHAR(8), GETDATE(), 112)
--通过POST_THEME表和SELF_CHECK_CFG表循环遍历自检设置条件
DECLARE ROW_CURSOR CURSOR FOR SELECT T.POST_THEME_SNO, C.SELF_CHECK_SNO, C.POST_TABLE, C.ERROR_INFO, C.CHECK_CONDITION
FROM POST_THEME T, SELF_CHECK_CFG C
WHERE T.POST_THEME_SNO = C.POST_THEME_SNO AND T.POST_THEME_STA = 1 AND C.SETUP_STATUS = 1
OPEN ROW_CURSOR
FETCH NEXT FROM ROW_CURSOR INTO @POST_THEME_SNO, @SELF_CHECK_SNO, @POST_TABLE, @ERROR_INFO, @CHECK_CONDITION
WHILE @@FETCH_STATUS = 0
BEGIN
--通过动态表@POST_TABLE(如:GPZY_INFO_TASK、YDGH_INF_TASK、ORG_USER_BASIC_INFO_TASK等)循环遍历流水表中的RECORD_SNO字段
DECLARE @SQL VARCHAR(2048), @RECORD_SNO NUMERIC(9)
--对输入串进行截取处理
DECLARE @FIRCONDITION VARCHAR(2048),@LASCONDITION VARCHAR(2048),@KEY VARCHAR(64),@POSITION INT
SET @KEY = ' WHERE '
SELECT @POSITION = CHARINDEX(@KEY,@CHECK_CONDITION)
SELECT @FIRCONDITION = LEFT(@CHECK_CONDITION,@POSITION+LEN(@KEY)-1)
SELECT @LASCONDITION = RIGHT(@CHECK_CONDITION,LEN(@CHECK_CONDITION)-@POSITION-LEN(@KEY))
SET @SQL = 'DECLARE ROW_TASK CURSOR FOR SELECT RECORD_SNO '+@FIRCONDITION+' (' +@LASCONDITION+') AND CREATE_DATE = CONVERT(VARCHAR(8), GETDATE(), 112)';
PRINT(@SQL)
EXEC(@SQL)
OPEN ROW_TASK
FETCH NEXT FROM ROW_TASK INTO @RECORD_SNO
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO SELF_CHECK_RESULT(POST_THEME_SNO, SELF_CHECK_SNO, TASK_SNO, ERROR_INFO, CREATE_DATE) VALUES(@POST_THEME_SNO, @SELF_CHECK_SNO, @RECORD_SNO, @ERROR_INFO, CONVERT(VARCHAR(8), GETDATE(), 112))
FETCH NEXT FROM ROW_TASK INTO @RECORD_SNO
END
CLOSE ROW_TASK
DEALLOCATE ROW_TASK
FETCH NEXT FROM ROW_CURSOR INTO @POST_THEME_SNO, @SELF_CHECK_SNO, @POST_TABLE, @ER
GO