sql存储过程示例

  1 USE [PMDB_IndexingSystem]
  2 GO
  3 /****** Object:  StoredProcedure [dbo].[V3]    Script Date: 2018/4/28 22:30:19 ******/
  4 SET ANSI_NULLS ON
  5 GO
  6 SET QUOTED_IDENTIFIER ON
  7 GO
  8 -- Batch submitted through debugger: SQLQuery1.sql|7|0|C:\Users\Aheading-222\AppData\Local\Temp\~vs1F11.sql
  9 -- =============================================
 10 -- Author:        <Author,,Name>
 11 -- Create date: <Create Date,,>
 12 -- Description:    <Description,,>
 13 -- =============================================
 14 ALTER PROCEDURE [dbo].[P_AutoIndexReporter_Add] 
 15 
 16 AS
 17 BEGIN    
 18     DECLARE @QueryDate NVARCHAR(8),@TxtNumber INT,@DbName NVARCHAR(20),@Year NVARCHAR(10) ,@Month NVARCHAR(10),@tableName NVARCHAR(50),@sqlStr NVARCHAR(500)
 19     SET @TxtNumber = 100
 20     SET @QueryDate = CONVERT (NVARCHAR(8),DATEADD(DAY,-1,GETDATE()),112)
 21     SET @Year = DATENAME(YEAR,GETDATE())
 22     SET @Month = DATENAME(MONTH,GETDATE())
 23     SET @DbName =     CASE  
 24                         WHEN @Month = '01' or @Month = '02' or @Month = '03' THEN 'DB'+@Year+'A'
 25                         WHEN @Month = '04' or @Month = '05' or @Month = '06' THEN 'DB'+@Year+'B'
 26                         WHEN @Month = '07' or @Month = '08' or @Month = '09' THEN 'DB'+@Year+'C'
 27                         WHEN @Month = '10' or @Month = '11' or @Month = '12' THEN 'DB'+@Year+'D'
 28                     ELSE 'DB2018A'
 29                     END
 30     SET @tableName = '[192.168.1.31].['+@DbName+'].[dbo].[ArticleInfoB]'
 31         --创建临时表
 32     CREATE TABLE #tempTable(REFID INT IDENTITY(1,1), KID BIGINT,paperID BIGINT,BT NVARCHAR(200),TX NVARCHAR(MAX),TXZS INT,ZZ NVARCHAR(100),PaperName NVARCHAR(50),BC VARCHAR(20),RQ date,CT NVARCHAR(MAX),TS NVARCHAR(MAX))
 33 
 34     SET @sqlStr = 'SELECT KID,paperID,RTRIM(LTRIM(BT)),TX,TXZS,RTRIM(LTRIM(ZZ)),RTRIM(LTRIM(MC)),RTRIM(LTRIM(BC)) ,CONVERT(date,CAST(RQ AS varchar)),CT,TS FROM '+ @tableName + ' WHERE RQ = '+@QueryDate
 35     --SET @sqlStr = 'SELECT KID,paperID,RTRIM(LTRIM(BT)),TX,TXZS,RTRIM(LTRIM(ZZ)),RTRIM(LTRIM(MC)),RTRIM(LTRIM(BC)) ,CONVERT(date,CAST(RQ AS varchar)),CT,TS FROM '+ @tableName + ' WHERE RQ = 20180426'
 36 
 37     --向临时表插入当天原始数据
 38     INSERT INTO #tempTable(KID,paperID,BT,TX,TXZS,ZZ,PaperName,BC,RQ,CT,TS)
 39     Exec(@sqlStr)
 40 
 41     --获取当天文章信息 @paperID 报社ID @TX内容 @ZZ作者 @BT标题 @KID主键ID
 42     DECLARE @paperID BIGINT,@TX NVARCHAR(MAX),@TXZS INT,@ZZ NVARCHAR(100),@BT NVARCHAR(200),@KID BIGINT,@PaperName VARCHAR(100),@BC VARCHAR(5),@RQ date,@CT NVARCHAR(MAX),@TS NVARCHAR(MAX)
 43     --标记当前临时表最小行号、最大行号
 44     DECLARE @MINID INT,@MAXID INT
 45     --获取临时表数据的最小行号、最大行号
 46     SELECT @MINID = MIN(REFID),@MAXID = MAX(REFID) FROM #tempTable
 47     --循环处理临时表
 48     WHILE @MINID <= @MAXID
 49     BEGIN
 50         --获取当前处理行的信息
 51         SELECT @paperID = paperID,@TX = TX,@TXZS = TXZS,@ZZ = ZZ,@BT = BT,@KID = KID,@PaperName = PaperName,@BC = BC,@RQ = RQ,@CT = CT,@TS = TS FROM #tempTable WHERE REFID = @MINID
 52 
 53         --业务处理begin
 54         SET @TX = RTRIM(LTRIM(@TX))
 55 
 56         IF ISNULL(@ZZ,'')<>'' --当文章作者不为空的时候直接插入数据
 57             BEGIN 
 58             INSERT INTO [dbo].[T_AutoIndexReporter]
 59                     ([AIReptID]
 60                     ,[ArticleID]
 61                     ,[ArticleTitle]
 62                     ,[ArticleHeadSubset]
 63                     ,[ArticleEndSubset]
 64                     ,[AIReptName]
 65                     ,[IsConfirm]
 66                     ,[CreateTime]
 67                     ,[PaperID]
 68                     ,[PaperName]
 69                     ,[BC]
 70                     ,[ContentText]
 71                     ,[TextNumber]
 72                     ,RQ
 73                     ,[CT]
 74                     ,[TS])
 75             VALUES
 76                 (NEWID()
 77                 ,@KID
 78                 ,@BT
 79                 ,LEFT(@TX , @TxtNumber)
 80                 ,RIGHT(@TX,@TxtNumber)
 81                 ,@ZZ
 82                 ,0
 83                 ,GETDATE()
 84                 ,@paperID
 85                 ,@PaperName
 86                 ,@BC
 87                 ,@TX
 88                 ,@TXZS
 89                 ,@RQ
 90                 ,@CT
 91                 ,@TS)
 92             END
 93         ELSE    --获取根据文章中的报纸ID获取正则表达式并匹配数据
 94             BEGIN
 95                 DECLARE @matchFlag INT
 96                 SET @matchFlag = 0
 97             
 98                 --正则匹配匹配出数据后修改插入表
 99                 DECLARE @Rule VARCHAR(500),@RangeMatching int
100                 DECLARE Cursor_Rule CURSOR  FOR (
101                 SELECT T2.[RangeMatching],T2.[Rule]
102                     FROM [RulesGroup_Paper] T
103                         INNER JOIN [dbo].[Rules_Group] T1 ON T.GroupID = T1.GroupID 
104                         INNER JOIN [dbo].[T_ReporterMatchingRules] T2 ON T1.RuleID = T2.ReptMachRuleID
105                     WHERE T.PaperID = @paperID)
106                 OPEN Cursor_Rule 
107                 FETCH NEXT FROM Cursor_Rule INTO @RangeMatching,@Rule
108                 WHILE (@@FETCH_STATUS = 0)
109                 BEGIN
110                     IF dbo.[Regex.IsMatch](@Rule,@TX)=1--正则表达式匹配数据并插入表
111                     BEGIN
112                         INSERT INTO [dbo].[T_AutoIndexReporter]
113                             ([AIReptID]
114                             ,[ArticleID]
115                             ,[ArticleTitle]
116                             ,[ArticleHeadSubset]
117                             ,[ArticleEndSubset]
118                             ,[AIReptName]
119                             ,[IsConfirm]
120                             ,[CreateTime]
121                             ,[PaperID]
122                             ,[PaperName]
123                             ,[BC]
124                             ,[ContentText]
125                             ,[TextNumber]
126                             ,RQ
127                             ,[CT]
128                             ,[TS])
129                         VALUES
130                             (NEWID()
131                             ,@KID
132                             ,@BT
133                             ,LEFT(@TX , @RangeMatching)
134                             ,RIGHT(@TX,@RangeMatching)
135                             ,SUBSTRING(RTRIM(LTRIM(dbo.[Regex.Match](@Rule,@TX))),1,100)
136                             ,0
137                             ,GETDATE()
138                             ,@paperID
139                             ,@PaperName
140                             ,@BC
141                             ,@TX
142                             ,@TXZS
143                             ,@RQ
144                             ,@CT
145                             ,@TS)
146                         
147                         SET @matchFlag = 1
148                         BREAK
149                     END
150                     FETCH NEXT FROM Cursor_Rule INTO @RangeMatching,@Rule 
151                 END
152                 CLOSE Cursor_Rule 
153                 DEALLOCATE Cursor_Rule   
154                 IF @matchFlag = 0
155                 BEGIN
156                     INSERT INTO [dbo].[T_AutoIndexReporter]
157                             ([AIReptID]
158                             ,[ArticleID]
159                             ,[ArticleTitle]
160                             ,[ArticleHeadSubset]
161                             ,[ArticleEndSubset]
162                             ,[AIReptName]
163                             ,[IsConfirm]
164                             ,[CreateTime]
165                             ,[PaperID]
166                             ,[PaperName]
167                             ,[BC]
168                             ,[ContentText]
169                             ,[TextNumber]
170                             ,RQ
171                             ,[CT]
172                             ,[TS])
173                         VALUES
174                             (NEWID()
175                             ,@KID
176                             ,@BT
177                             ,LEFT(@TX , @TxtNumber)
178                             ,RIGHT(@TX,@TxtNumber)
179                             ,''
180                             ,0
181                             ,GETDATE()
182                             ,@paperID
183                             ,@PaperName
184                             ,@BC
185                             ,@TX
186                             ,@TXZS
187                             ,@RQ
188                             ,@CT
189                             ,@TS)
190                 END   
191             END
192         --业务处理end
193 
194         SET @MINID = @MINID + 1
195     END
196 
197 
198 END

猜你喜欢

转载自www.cnblogs.com/Q827170326/p/8978643.html
今日推荐