SQL视图优化改写为存储过程遇到 双引号 单引号问题
USE [TEMP]
GO /****** Object: StoredProcedure [dbo].[P_GetAlterAsset]
SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO ALTER proc [dbo].[P_GetAlterAssetPage]
(
@filterCondition varchar(max)='',
@pageIndex int,
@pageSize int,
@totalCount int output
)
AS Begin
DECLARE @queryStr NVARCHAR(MAX)=''
DECLARE @pageStr NVARCHAR(MAX)=''
DECLARE @endStr NVARCHAR(MAX)=''
DECLARE @countStr NVARCHAR(MAX)=''
DECLARE @and NVARCHAR(MAX)='' set @and = @filterCondition
set @queryStr = '
WITH T1
AS ( SELECT ALDE_MSNo
FROM T_Alter_Apply
LEFT JOIN T_Alter_Detail ON ALDE_ApplyID = AP_ID
WHERE AP_StateID = 1
UNION
SELECT [GBDE_MSNo]
FROM [dbo].[T_Giveback_Apply]
LEFT JOIN [dbo].[T_GiveBack_Detail] ON [AP_ID] = [GBDE_APID]
WHERE AP_State = 1
),
T4
AS ( SELECT al.AL_State ,
ali.ALI_ASNo ,
al.[AL_ID]
FROM [dbo].[T_Alter] al
inner JOIN [dbo].[T_AlterItem] ali ON al.[AL_AlterNo] = ali.[ALI_AlterNo]
AND al.AL_State <> 100 ), T2
AS ( SELECT DISTINCT
b.AS_TypeName ,
b.AS_MSNo ,
b.AS_BrandName ,
b.AS_Model ,
c.AD_CPU ,
c.AD_HardDisk ,
c.AD_Memory ,
c.AD_VideoCard AS AD_SoundCard ,
b.AS_Price ,
b.AS_State ,
b.AS_CostCenterName ,
b.AS_CostCenterNo ,
b.AS_Category,
b.AS_PlaceNo,
b.AS_PlaceName,
b.AS_ProjectNo,
b.AS_ProjectName,
b.AS_VestInNo,
b.AS_VesInName,
b.AS_IsSpecialPro,
b.AS_ProfitCenterNo ,
b.AS_ProfitCenterName,
b.AS_ComNo,
b.AS_ComName,
CASE WHEN T1.ALDE_MSNo IS NOT NULL
THEN "变更中"
WHEN ISNULL(T4.AL_State, 2) = 2
THEN "可变更"
ELSE "变更中"
END AS AL_StateName
FROM dbo.T_Asset b with(nolock)
LEFT JOIN dbo.T_AssetDetail c with(nolock) ON b.AS_ADID = c.AD_ID
LEFT JOIN T4 with(nolock) ON b.AS_MSNo = T4.ALI_ASNo
LEFT JOIN T1 with(nolock) ON b.AS_MSNo = T1.ALDE_MSNo
LEFT JOIN dbo.V_PSA_PrjInfo p with(nolock) ON b.AS_ProjectNo=p.PrjCode
WHERE b.AS_State = 1
and (p.PrjTypeID NOT IN ( 710, 711 ) or p.PrjTypeID is null)
and (p.PrjStatus IN ( 6, 10 ) or p.PrjStatus is null )
'+@and + ')' set @pageStr = replace(@queryStr,'"','''')
set @endStr = @pageStr+' SELECT * FROM (select row_number() over(order by AS_Price ) as rowIndex,* FROM T2 ) tt where tt.rowIndex between '+ CAST(((@pageIndex-1)*@pageSize + 1) as nvarchar(20)) +' and '+ CAST((@pageIndex*@pageSize) as nvarchar(20)) DECLARE @strCountSql NVARCHAR(max)
SET @strCountSql = @queryStr +' Select @RecordCount = count(*) FROM T2 '
EXEC sp_executesql @strCountSql, N'@RecordCount int OUTPUT', @totalCount OUTPUT execute (@endStr) END GO
此文仅作用于学习记录,之前写的为一个视图,在功能中又在外面嵌套各种条件进行查询,相当于查询所有数据后再进行分页,速度很慢,特别耗费服务器cpu资源;
把一个视图修改为两个存储过程,一个分页,一个查询所有;调用代码如下:
#region 优化为存储过程 20190104
var parameters = new List<System.Data.SqlClient.SqlParameter>();
parameters.Add(new System.Data.SqlClient.SqlParameter("@filterCondition", sql));
parameters.Add(new System.Data.SqlClient.SqlParameter("@pageIndex", pageIndex));
parameters.Add(new System.Data.SqlClient.SqlParameter("@pageSize", pageSize));
SqlParameter outParameter = new SqlParameter("@totalCount", SqlDbType.Int, );
outParameter.Direction = ParameterDirection.Output;
parameters.Add(outParameter);
var lstAssets = db.Database.SqlQuery<AssetAlterInfo>("exec P_EAM_GetAlterAssetPage @filterCondition, @pageIndex, @pageSize, @totalCount out", parameters.ToArray()).ToList();
count = Convert.ToInt32(outParameter.Value == DBNull.Value ? : outParameter.Value);
存储过程分页
SQL视图优化改写为存储过程遇到 双引号 单引号问题的更多相关文章
- 在ASP学习当中对双引号,单引号以及&符号的理解
在我的Web安全学习的开始需要对ASP的代码有一定的熟悉程度但是在查看源码的时候经常性的看到双引号,单引号以及&号.并且对他们的用法经常产生疑惑的地方,这里是我搜集的一些理解和感悟,以期对AS ...
- ASP中双引号单引号和&连接符使用技巧
ASP中双引号单引号和&连接符使用技巧 一.ASP中处在双引号中的可以是任意的字符.字符串,HTML代码 1.<%response.write ("I am here" ...
- sed 双引号 单引号的区别
a="abcd" b="abc" sed -i '/$a/ s/$/$b/' test.a 我想在test.a中匹配以”abcd“开头的行,然后在行尾加入”ab ...
- Python字符串符号:双引号/单引号用法注解。
众所周知python中单引号和双引号常常被我们所使用,例如print.input等等. 但是对于打印输出所引导的字符串大多都是用双引号的形式来做,"Hello,python!",而 ...
- shell 脚本中双引号 单引号 反引号 的区别
转自:http://blog.csdn.net/iamlaosong/article/details/54728393 最近要编个shell脚本处理数据,需要检测数据文件是否存在,文件名中包含日期,所 ...
- mysql where in形式存储过程如何传递带有单引号的入参
对于存储过程或者函数,我们通常都有这样的一个需求,传递一个参数,输出一个结果.如:我传递一个账号,返回这个账号所拥有的权限.但是如果这个需求改了,我要传递多个账号,获取这些账号权限,但是账号的个数不限 ...
- SQL注入之Sqli-labs系列第十一关(基于单引号的万能密码注入)
本来以前写过sqli-labs的实战文章,但由于搞了事情,自己的服务器IP被封了,到期后又不太想续了,就一直没管.心酸的痛,都懂的....... 好了,最近这两天一口气写完前十关GET型的,现在到了P ...
- PHP 单引号与双引号的区别 SQL中的使用
php单引号与双引号用法:引号嵌套方法 1.双引号内不能直接就再嵌套双引号 2.双引号与单引号互相嵌套使用 如: 双引号内直接嵌套单引号 echo "<script language= ...
- Unix Shell中单引号、双引号字符、反斜杠、反引号的使用[转]
在执行shell脚本的时候,shell将会对脚本中的行进行解释,然后执行:对于一些特殊处理的句子,我们可以使用引号或者反斜线来避免shell解释执行之.如下,当在命令行中输入:echo *child. ...
随机推荐
- history.pushState 实现浏览器页面不刷新修改url链接
最近遇到了在不刷新页面的情况下修改浏览器url链接的需求,遂求助于万能的度娘,最终通过history.pushState()完美解决问题.现在将我理解的一些内容分享一下,不对的地方欢迎大家指出. 在使 ...
- 用Python写一个小爬虫吧!
学习了一段时间的web前端,感觉有点看不清前进的方向,于是就写了一个小爬虫,爬了51job上前端相关的岗位,看看招聘方对技术方面的需求,再有针对性的学习. 我在此之前接触过Python,也写过一些小脚 ...
- python私有成员与公有成员(_和__)
python并没有对私有成员提供严格的访问保护机制. 在定义类的成员时,如果成员名以两个下划线“__”或更多下划线开头而不以两个或更多下划线结束则表示是私有成员. 私有成员在类的外部不能直接访问,需要 ...
- 【Java_基础】java中的多态性
方法的重载.重写和动态链接构成了java的多态性. 1.方法的重载 同一个类中多个同名但形参有所差异的方法,在调用时会根据参数的不同做出选择. 2.方法的重写 子类中重新定义了父类的方法,有关方法重写 ...
- mysql存储过程详解及基于PHP使用实例
mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...
- 老男孩Python高级全栈开发工程师【真正的全套完整无加密】
点击了解更多Python课程>>> 老男孩Python高级全栈开发工程师[真正的全套完整无加密] 课程大纲 老男孩python全栈,Python 全栈,Python教程,Django ...
- sweetalert使用随笔
删除前确认框: //找到删除那天记录的按钮,触发点击事件 $(".del").on('click', function () { swal({ title: "操作确认& ...
- Python从文件中读取数据(2)
一.读取文件中各行的内容并存储到一个列表中 继续用resource.txt 举例 resource.txt my name is joker, I am 18 years old, How about ...
- CSS 媒体查询 响应式
媒体查询 从 CSS 版本 2 开始,就可以通过媒体类型在 CSS 中获得媒体支持.如果您曾经使用过打印样式表,那么您可能已经使用过媒体类型.清单 1 展示了一个示例. 清单 1. 使用媒体类型 &l ...
- python 多线程、多进程、协程性能对比(以爬虫为例)
基本配置:阿里云服务器低配,单核2G内存 首先是看协程的效果: import requests import lxml.html as HTML import sys import time impo ...