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

ALTER PROC [dbo].[Student_Friend_Get]
        @startRowIndexId INT,
        @maxNumberRows  INT,
        @schoolId  INT,
        @gradeId  INT,
        @cId  INT,
        @keyWords NVARCHAR(100),
        @userName VARCHAR(50)
         AS
                BEGIN
                    DECLARE @sqlfilter  VARCHAR(max)
                    SET @sqlfilter = ' '
                    IF(@schoolId <> -1)
                                SET @sqlfilter = @sqlfilter + '   tableu.SchoolId =  ' + CAST(@schoolId AS VARCHAR(50)) + ' AND'
                        IF(@gradeId <> -1)
                                SET @sqlfilter =  @sqlfilter +  '  tableu.GradeId =  ' + CAST(@gradeId AS VARCHAR(50)) + ' AND'
                        IF(@cId <> -1)
                                SET @sqlfilter =  @sqlfilter +  '  tableu.ClassId =  ' + CAST(@cId AS VARCHAR(50)) + ' AND'
                        IF(@keyWords IS NOT NULL)
                                SET @sqlfilter =  @sqlfilter + '   tableu.TrueName like  ''%' + CAST(@keyWords AS VARCHAR(50))         + '%''  AND'

                        DECLARE @beg INT,@end INT
                        SET @beg =  @startRowIndexId+1
                        SET @end =  @startRowIndexId + @maxNumberRows
                        SET @sqlfilter = @sqlfilter +  '  tableu.num  BETWEEN  ' +CAST( @beg AS VARCHAR(50)) + ' AND '+ CAST(@end  AS VARCHAR(50))

                        DECLARE @sqlmain  VARCHAR(max)
                        SET @sqlmain = ' '
                        SET @sqlmain = @sqlmain  +  ' SELECT * FROM
                        (
                            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
                                        FROM PE_C_StudentJoinClass AS cjs
                                        LEFT JOIN dbo.PE_SS_StudentClass AS c
                                        ON cjs.ClassId = c.ClassId
                                        LEFT JOIN dbo.PE_Users AS u
                                        ON u.UserName = cjs.UserName
                                        LEFT JOIN dbo.PE_SS_Grade g
                                        ON g.GradeId = c.GradeId
                                        LEFT JOIN dbo.PE_SS_School s
                                        ON s.SchoolId = g.SchoolId
                                        LEFT JOIN PE_Contacter CTA
                                        ON cjs.UserName = CTA.UserName
                                        WHERE ApplyID IN
                                        (
                                                SELECT
                                                MAX(cs1.ApplyID) AS [ApplyID]
                                                FROM PE_C_StudentJoinClass AS cs1
                                                CROSS JOIN dbo.PE_C_StudentJoinClass AS cs2
                                                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
                                                GROUP BY cs1.UserName
                                        )
                                ) AS tableu WHERE '

                                PRINT (@sqlmain + @sqlfilter)
                            EXEC (@sqlmain + @sqlfilter)

                END

GO

  

时间: 2024-10-22 18:30:51

sqlserver 存储过程中拼接sql语句 动态执行的相关文章

存储过程中拼接SQL语句

很多时候我们需要利用参数在存储过程中重新组织SQL语句,在存储过程中拼接的SQL语句只是一个字符串,不会被直接执行,所以加一个execute执行它就可以了.具体看如下演示代码: 代码: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ============================================= -- Author:  yy -- Create date: 2012-1-17 -- Description: 存储过程S

oracle-怎样验证spool中的sql语句是否执行成功

问题描述 怎样验证spool中的sql语句是否执行成功 在linux环境下,执行一个sh脚本,里面包含了spool,里面包含查询语句,将查询结果指定到了一个txt文件,然后我需要知道这个语句是否执行成功.然后再导到另外的日志txt里面去. 求大神解决,或者推荐别的方法. 解决方案 判断SQL语句是否执行成功

存储过程中, 用sql语句分组, 想得到每个组中的东西,可以得到吗

问题描述 比如按name分组之后结果如下:name score A 80 A 90 A 85 B 70 B 85 B 80想在存储过程中循环拿到A组中所有数据, 然后再拿B组中的数据...即取每组的数据进行操作 解决方案 你定义一个游标,游标指向分组就可以了,然后对游标进行读取操作解决方案二:(1)疑问:比如按name分组之后结果如下: name score A 80 A 90 A 85 B 70 B 85 B 80 按name分组后,还有name相同的记录存在?(2)同[jinbingchua

SQLSERVER 2005中使用sql语句对xml文件和其数据的进行操作(很全面)_mssql2005

--用SQL多条可以将多条数据组成一棵XML树L一次插入 --将XML树作为varchar参数传入用 --insert xx select xxx from openxml() 的语法插入数据 -----------------------------------导入,导出xml-------------------------- --1导入实例 --单个表 create table Xmltable(Name nvarchar(20),Nowtime nvarchar(20)) declare

在ASP中判断SQL语句是否执行成功

利用err对象: sql="insert into table(f1,f2) values('v1','v2')" conn.execute sql if err.number<>0 then response.write "出错了:"& err.description err.clear else response.write "OK" end if   

mssql-存储过程不让拼接SQL语句

问题描述 存储过程不让拼接SQL语句 公司DBA不允许创建的存储过程中有拼接SQL语句的行为,请问,该怎么解决?说是这样做有风险,说我非要用的话,可以签一份风险协议,出了问题我负责之类的.请问:各位在多条件查询这种情况下,存储过程都是怎么写的?有不拼接又省事的办法吗?另外,这个风险难道微软没有提供解决方案吗? 解决方案 真正的风险, 不在于拼SQL, 而是输入值没有参数化. 比如: delare @sql nvarchar(max), @name nvarchar(20) set @name='

实例讲解ASP动态网页制作中使用SQL语句

sql|动态|网页|语句 在SQL的世界里,最最基础的操作就是SELECT 语句了.在数据库工具下直接采用SQL的时候很多人都. 在ASP中使用SQL语句之1:用Select查询 熟悉下面的操作: SELECT whatFROM whichTableWHERE cnwebjx 执行以上语句就会创建一个存放其结果的查询. 而在ASP页面文件上,你也可以采用以上的一般语法,不过情况稍微不同,ASP编程的时候,SELECT 语句的内容要作为字符串赋给一个变量: SQL = "SELECT what F

mysql-java中的sql语句为何会报错,而到了workbench就可以执行

问题描述 java中的sql语句为何会报错,而到了workbench就可以执行 rt基本上是timestamp的格式,比如insert into table values ('2015-03-17 00:00:00');这句话在java通过jdbc执行就会报错,而直接在workbench下面操作就没有问题为什么会这样? 解决方案 可能是字符串单引号等引起的,打印代码中的字符串跟workbench中比较 解决方案二: insert into table(字段1,字段2....) value( 值1

sqlserver中关于sql语句

问题描述 sqlserver中关于sql语句 上图分别为a,b两列的数据让c的数据为b-a=?.有-符号则c=-.怎么写sql语句. c的数据类型为什么? 解决方案 update table set c = a-b 解决方案二: update table set c = DateDiff(MINUTE,a,b) 解决方案三: sqlserver中的一些简单的sql语句sqlserver sql实用语句Sqlserver常用sql语句 解决方案四: update table set c = Dat