动态SQL语句使用心得

所属分类: 数据库 / MsSql 阅读数: 914
收藏 0 赞 0 分享
在我们的项目中经常需要用到分面功能,而我以前呢用的方法现在看起来都是那麽的笨拙,当时是这样做的,每当要进行数据分页时就专们针对那个表做分页,大家别笑,以前确实好笨。呵呵,虽然当时也有一个想法就是希望能够传入一张表进去进行操作,但那样的话编译是通不过的,因为FROM后面操作的是表变量,而不能是我们自定义的变量,所以当时没有深追究,现在为当时不深入学习而BS一下。

动态SQL需要准备以下内容:

1、@SQL 拼接后的SQL语句,可以是你任意需要的SQL语句如:SET @SQL='SELECT * FROM table WHERE ID=@id' 注意此处的@SQL必须且只能是NTEXT、NVARCHAR、NCHAR类型,如果是其它类型的话其它地方明明没有问题却会报 "过程需要类型为 'ntext/nchar/nvarchar' 的参数"这个错误。同时,如果这里需要传入表名称的话则应这样写:SET @SQL='SELECT * FROM '+@table+'WHERE ID=@id' ,因为上面传入的值是文本类型故会报错。

2、@parameters 所拼接的SQL语句里面的参数,按上面的话这里应该是:SET @parameters='@id INT' 同时这个参数的类型也必须且只能是NTEXT、NVARCHAR、NCHAR类型
3、调用:sp_executesql param1(,param2) 其中param1一般我们作为是@SQL,后面的参数则是我们在@sql中的参数了,但这里要注意的是传参的时候必须是对应的:

复制代码 代码如下:

  DECLARE @InputId INT ;
  SET @InputId=1;
   param2为:@id=@InputId;


以下是写的一个简单的通用分页,有需要可以自行修改:

复制代码 代码如下:

ALTER PROCEDURE sp_pager
(
@TableName nvarchar(50), -- 表名
@ReturnFields nvarchar(200) = '*', -- 需要返回的列
@PageSize int = 50, -- 每页记录数
@PageIndex int = 1 -- 当前页码
)
AS
DECLARE @SQL NVARCHAR(1000)
DECLARE @paramters NVARCHAR(200)
BEGIN
SET NOCOUNT ON
SET @SQL='SELECT '+@ReturnFields+' FROM '+@TableName+' WHERE ID>(SELECT TOP 1 ID FROM (SELECT TOP '+CAST(@PageSize*@PageIndex AS VARCHAR)+' ID FROM '+@TableName+ ' ORDER BY ID )AS A ORDER BY ID DESC)'
PRINT @SQL
EXECUTE sp_executesql @SQL,@paramters,@columns=@ReturnFields
END
更多精彩内容其他人还在看

浅析SQL Server 聚焦索引对非聚集索引的影响

本篇文章对SQL Server的聚焦索引和非聚集索引进行简单分析,从而总结出聚焦索引对非聚集索引的影响。有兴趣的朋友可以看下
收藏 0 赞 0 分享

浅析SQL Server的聚焦使用索引和查询执行计划

本文通过介绍默认使用索引、强制使用聚集索引、强制使用非聚集索引让我们知道对于检索所有列结果集使用主键的聚集索引是最佳选择。有兴趣的朋友可以看下
收藏 0 赞 0 分享

详解SQL Server中的数据类型

本文主要讲解了SQL中的数据类型以及几个需要注意的地方,简短的内容,深入的理解。有兴趣的朋友可以看下
收藏 0 赞 0 分享

浅析SQL Server的分页方式 ISNULL与COALESCE性能比较

本文上述重点讲述了SQL Server的分页方式,COALESCE和ISNULL函数区别之处,简短的内容,深入的理解。有兴趣的朋友可以看下
收藏 0 赞 0 分享

浅述SQL Server的聚焦强制索引查询条件和Columnstore Index

本文主要讲了强制使用索引条件来进行查询,当对于使用默认创建索引进行查询计划时觉得不是最优解,可以尝试使用强制索引来进行对比找出更好得解决方案。简短的内容,深入的理解.有兴趣的朋友可以看下
收藏 0 赞 0 分享

详解SQL Server的聚焦过滤索引

本文主要讲解了通过过滤索引来提高查询性能,同时也给出了其不同的场景以及其使用优点和明显的缺点。简短的内容,深入的理解,有兴趣的朋友可以看下
收藏 0 赞 0 分享

解析SQL Server聚焦移除(Bookmark Lookup、RID Lookup、Key Lookup)

本文主要讲解索引性能优化,着重对Bookmark Lookup、RID Lookup、Key Lookup三者进行移除的实现进行解析,以此来提高查询性能。希望对大家有所帮助
收藏 0 赞 0 分享

SqlServer 注释符 单行注释与多行注释

这篇文章主要介绍了SqlServer 注释符 单行注释与多行注释,需要的朋友可以参考下
收藏 0 赞 0 分享

SQL设置SQL Server最大连接数及查询语句

今天遇到了关于Sql Server最大连接数(Max Pool Size)的问题,后来通过查找一些资料解决了,所以想着总结下关于SQL Server最大连接数的内容,所以这篇文章主要介绍了SQL设置SQL Server最大连接数与查询语句,有需要的朋友们可以参考借鉴。
收藏 0 赞 0 分享

浅谈SQL Server交叉联接 内部联接

本文主要讲了SQL Server的交叉联接和内部联接,同时也给出了使用需要注意的地方。有需要的朋友可以看下
收藏 0 赞 0 分享
查看更多