首页 > 数据库技术 > 详细

SQL动态拼接字符串生成分页存储过程

时间:2016-01-05 20:31:37      阅读:295      评论:0      收藏:0      [点我收藏+]

今天做一个订单查询的时候,要求动态条件查询订单的明细,这个在后台写程序其实也很简单,但是今天脑洞打开,就尝试一下直接在写一条存储过程在后台动态拼接字符串然后查询,不知道这样写会不会有什么其他的问题呢?

具体代码如下:

本人还是个菜鸟,语文水平也很低,描述的比较含糊不清,望各位大神指点指点

 1 USE [#####]
 2 GO
 3 /****** Object:  StoredProcedure [dbo].[MES_PDO_Page]    Script Date: 01/05/2016 18:08:31 ******/
 4 SET ANSI_NULLS ON
 5 GO
 6 SET QUOTED_IDENTIFIER ON
 7 GO
 8 ALTER proc [dbo].[MES_PDO_Page]
 9 @pageIndex INT,
10 @pageSize INT,
11 @Status INT,
12 @PDO VARCHAR(50),
13 @WorkCenter VARCHAR(50),
14 @pageCount  INT OUTPUT
15 
16 AS
17     BEGIN
18         DECLARE @conditions NVARCHAR(500)
19         DECLARE @sort NVARCHAR(50)
20         --动态组合查询条件
21         SET @conditions= 
22         SET @sort= 
23             IF (@Status>0)
24             --因为是组合字符串,所以必须把数值类型转化为字符串,否则报错
25                 SET @conditions=@conditions+AND (Status=+CAST(@Status AS NVARCHAR(10))+)
26                 SET @sort=PARTITION BY Status 
27             IF (@PDO IS NOT NULL)
28             --‘的转移字符是两个‘‘
29                 SET @conditions=@conditions+AND (PDO=‘‘‘+@PDO+‘‘‘)
30             IF (@WorkCenter IS NOT NULL)
31             --SET @conditions+=@conditions+‘AND (WorkCenter Like %‘+@WorkCenter+‘%)‘
32                 SET @conditions+=@conditions+AND (WorkCenter=‘‘‘+@WorkCenter+‘‘‘)
33                 SET @sort=PARTITION BY WorkCenter 
34             IF((@Status>0)AND(@WorkCenter IS NOT NULL))
35             SET @sort=PARTITION BY WorkCenter,Status 
36             --声明SQL语句字符串一定要长度要比字符串本身长度要长,不然会报错
37             DECLARE @sqlPage NVARCHAR(2000)
38             DECLARE @min INT, @max INT
39             SET @min=@pageSize*(@pageIndex-1)+1
40             SET @max=@pageIndex*@pageSize
41             --同样因为是组合字符串,所以必须把分页数值类型转化为字符串,否则报错
42             SET @sqlPage=SELECT * FROM
43             (SELECT ROW_NUMBER() OVER (+@sort+ORDER BY ID DESC)AS RowNumber,* FROM MES_Base_PDO)AS PageData
44             WHERE (RowNumber BETWEEN +CAST(@min AS NVARCHAR(10))+ AND +CAST(@max AS NVARCHAR(10))
45             +) AND (IsDelete=0)+@conditions
46             EXEC (@sqlPage)
47             
48             DECLARE @sqlCount NVARCHAR(500)
49             SET @sqlCount=SELECT @pageCount=COUNT(*) FROM MES_Base_PDO WHERE IsDelete=0+@conditions
50             declare @recordCount int
51             exec sp_executesql @sqlCount, N@pageCount int output, @pageCount OUTPUT
52     END
53     --exec sql和exec(sql)是有区别的.
54     --exec sql是执行存储过程.
55     --exec(sql)是执行sql字符串语句.
56 --
57 --EXEC (@sqlCount)

 

SQL动态拼接字符串生成分页存储过程

原文:http://www.cnblogs.com/LiGengMing/p/5103392.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!