sqlserver 存储过程中拼接sql语句 动态执行

 1 ALTER PROC [dbo].[Student_Friend_Get]
 2         @startRowIndexId INT,
 3         @maxNumberRows  INT,
 4         @schoolId  INT,
 5         @gradeId  INT,
 6         @cId  INT,
 7         @keyWords NVARCHAR(100),
 8         @userName VARCHAR(50)
 9          AS
10                 BEGIN
11                     DECLARE @sqlfilter  VARCHAR(max)
12                     SET @sqlfilter = ' '
13                     IF(@schoolId <> -1)
14                                 SET @sqlfilter = @sqlfilter + '   tableu.SchoolId =  ' + CAST(@schoolId AS VARCHAR(50)) + ' AND'
15                         IF(@gradeId <> -1)
16                                 SET @sqlfilter =  @sqlfilter +  '  tableu.GradeId =  ' + CAST(@gradeId AS VARCHAR(50)) + ' AND'
17                         IF(@cId <> -1)
18                                 SET @sqlfilter =  @sqlfilter +  '  tableu.ClassId =  ' + CAST(@cId AS VARCHAR(50)) + ' AND'
19                         IF(@keyWords IS NOT NULL)
20                                 SET @sqlfilter =  @sqlfilter + '   tableu.TrueName like  ''%' + CAST(@keyWords AS VARCHAR(50))         + '%''  AND'
21                           
22                         DECLARE @beg INT,@end INT
23                         SET @beg =  @startRowIndexId+1
24                         SET @end =  @startRowIndexId + @maxNumberRows
25                         SET @sqlfilter = @sqlfilter +  '  tableu.num  BETWEEN  ' +CAST( @beg AS VARCHAR(50)) + ' AND '+ CAST(@end  AS VARCHAR(50))
26                           
27                         DECLARE @sqlmain  VARCHAR(max)
28                         SET @sqlmain = ' '
29                         SET @sqlmain = @sqlmain  +  ' SELECT * FROM
30                         (
31                             SELECT ROW_NUMBER() OVER(ORDER BY cjs.UserName) AS num,CTA.TrueName, u.UserName, c.ClassName + '' (''+ CAST(YEAR(c.GradeUpdateTime) AS NVARCHAR(20))+''年)'' AS [ClassName],s.SchoolName,cjs.ApplyTime,g.GradeName,cjs.ApplyID,c.ClassId,g.GradeId,s.SchoolId
32                                         FROM PE_C_StudentJoinClass AS cjs
33                                         LEFT JOIN dbo.PE_SS_StudentClass AS c
34                                         ON cjs.ClassId = c.ClassId
35                                         LEFT JOIN dbo.PE_Users AS u
36                                         ON u.UserName = cjs.UserName
37                                         LEFT JOIN dbo.PE_SS_Grade g
38                                         ON g.GradeId = c.GradeId
39                                         LEFT JOIN dbo.PE_SS_School s
40                                         ON s.SchoolId = g.SchoolId
41                                         LEFT JOIN PE_Contacter CTA
42                                         ON cjs.UserName = CTA.UserName
43                                         WHERE ApplyID IN
44                                         (
45                                                 SELECT 
46                                                 MAX(cs1.ApplyID) AS [ApplyID]
47                                                 FROM PE_C_StudentJoinClass AS cs1
48                                                 CROSS JOIN dbo.PE_C_StudentJoinClass AS cs2
49                                                 WHERE cs2.UserName = '''+ CAST(@userName  AS VARCHAR(50))+ ''' AND cs1.UserName != ''' + CAST(@userName  AS VARCHAR(50))+  ''' AND cs1.ClassId = cs2.ClassId AND cs1.Status = 1
50                                                 GROUP BY cs1.UserName
51                                         )
52                                 ) AS tableu WHERE '
53                                   
54                                 PRINT (@sqlmain + @sqlfilter)
55                             EXEC (@sqlmain + @sqlfilter)
56   
57                 END
58   
59   
60 GO

 

转载于:https://www.cnblogs.com/a-dou/articles/5193552.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值