可重复使用的存储过程(增,删,改,查,分页)
2011-08-30 16:25
746 查看
/*
* 增加
*/
IF OBJECT_ID('usp_InsertObj','P') IS NOT NULL
DROP PROC usp_InsertObj
GO
CREATE PROC usp_InsertObj
@InsertList VARCHAR(2000), --欲更新字段列表
@TableSource VARCHAR(100), --表名或视图表
@valueList VARCHAR(2000) --赋值
AS
BEGIN
BEGIN TRANSACTION
DECLARE @errorSum INT
SET @errorSum=0
IF @InsertList IS NOT NULL OR LTRIM(RTRIM(@InsertList))<>''
BEGIN
SET @InsertList=' ( '+@InsertList+' )'
END
PRINT @InsertList
SET @valueList=ISNULL(@valueList,'')
SET @valueList=LTRIM(RTRIM(@valueList))
IF @valueList<>''
BEGIN
SET @valueList=' VALUES ( '+@valueList+' )'
END
PRINT @valueList
DECLARE @SQL VARCHAR(2000)
SET @SQL='INSERT INTO '+@TableSource+@InsertList+@valueList
PRINT @SQL
SET NOCOUNT ON
EXEC(@SQL)
SET @errorSum=@errorSum+@@ERROR
SET NOCOUNT OFF
IF @errorSum<>0
BEGIN
PRINT '添加失败'
ROLLBACK TRANSACTION
END
ELSE
BEGIN
PRINT '添加成功'
COMMIT TRANSACTION
END
RETURN @@RowCount
END
GO
/*
* 数据删除
*/
IF OBJECT_ID('usp_DeleteObj','P') IS NOT NULL
DROP PROC usp_DeleteObj
GO
CREATE PROC usp_DeleteObj
@TableSource VARCHAR(100), --表名或视图表
@DeleteCondition VARCHAR(2000) --查询条件
AS
BEGIN
BEGIN TRANSACTION
DECLARE @errorSum INT
SET @DeleteCondition=ISNULL(@DeleteCondition,'')
SET @DeleteCondition=LTRIM(RTRIM(@DeleteCondition))
IF @DeleteCondition<>''
BEGIN
SET @DeleteCondition=' WHERE '+@DeleteCondition
END
PRINT @DeleteCondition
DECLARE @SQL VARCHAR(2000)
SET @SQL='DELETE FROM '+@TableSource
+@DeleteCondition
PRINT @SQL
SET NOCOUNT ON
EXEC(@SQL)
SET @errorSum=@errorSum+@@ERROR
SET NOCOUNT OFF
IF @errorSum<>0
BEGIN
PRINT '更新失败'
ROLLBACK TRANSACTION
END
ELSE
BEGIN
PRINT '更新成功'
COMMIT TRANSACTION
END
RETURN @@RowCount
END
GO
/*
* 数据更新
*/
IF OBJECT_ID('usp_UpdateObj','P') IS NOT NULL
DROP PROC usp_UpdateObj
GO
CREATE PROC usp_UpdateObj
@UpdateList VARCHAR(2000), --欲更新字段列表
@TableSource VARCHAR(100), --表名或视图表
@UpdateCondition VARCHAR(2000) --查询条件
AS
BEGIN
BEGIN TRANSACTION
DECLARE @errorSum INT
SET @UpdateCondition=ISNULL(@UpdateCondition,'')
SET @UpdateCondition=LTRIM(RTRIM(@UpdateCondition))
IF @UpdateCondition<>''
BEGIN
SET @UpdateCondition=' WHERE '+@UpdateCondition
END
PRINT @UpdateCondition
DECLARE @SQL VARCHAR(2000)
SET @SQL='UPDATE '+@TableSource+'
'+@UpdateList+' '+@UpdateCondition
PRINT @SQL
SET NOCOUNT ON
EXEC(@SQL)
SET @errorSum=@errorSum+@@ERROR
SET NOCOUNT OFF
IF @errorSum<>0
BEGIN
PRINT '更新失败'
ROLLBACK TRANSACTION
END
ELSE
BEGIN
PRINT '更新成功'
COMMIT TRANSACTION
END
RETURN @@RowCount
END
GO
/*
* 查询
* 支持分页
*/
IF OBJECT_ID('usp_GetRecordFromPage','P') IS NOT NULL
DROP PROC usp_GetRecordFromPage
GO
CREATE PROC usp_GetRecordFromPage
@SelectList VARCHAR(2000), --欲选择字段列表
@TableSource VARCHAR(100), --表名或视图表
@SearchCondition VARCHAR(2000), --查询条件
@OrderExpression VARCHAR(1000), --排序表达式
@PageIndex INT=1, --页号,从0开始
@PageSize INT=10 --页尺寸
AS
BEGIN
IF @SelectList IS NULL OR LTRIM(RTRIM(@SelectList))=''
BEGIN
SET @SelectList='*'
END
PRINT @SelectList
SET @SearchCondition=ISNULL(@SearchCondition,'')
SET @SearchCondition=LTRIM(RTRIM(@SearchCondition))
IF @SearchCondition <>''
BEGIN
SET @SearchCondition='WHERE '+@SearchCondition
END
PRINT @SearchCondition
SET @OrderExpression=ISNULL(@OrderExpression,'')
SET @OrderExpression=LTRIM(RTRIM(@OrderExpression))
IF @OrderExpression <>''
BEGIN
IF UPPER(SUBSTRING(@OrderExpression,1,5))<>'WHERE'
BEGIN
SET @OrderExpression='ORDER BY '+@OrderExpression
END
END
PRINT @OrderExpression
IF @PageIndex IS NULL OR @PageIndex<1
BEGIN
SET @PageIndex=1
END
PRINT @PageIndex
IF @PageSize IS NULL OR @PageSize<1
BEGIN
SET @PageSize=10
END
PRINT @PageSize
DECLARE @SQL VARCHAR(4000)
SET @SQL='SELECT '+@SelectList+',RowNumber
FROM
(SELECT ' + @SelectList + ',ROW_NUMBER() OVER( '+ @OrderExpression +') AS RowNumber
FROM '+@TableSource+' '+ @SearchCondition +') AS RowNumberTableSource
WHERE RowNumber BETWEEN ' + CAST(((@PageIndex - 1)* @PageSize+1) AS VARCHAR)
+ ' AND ' +
CAST((@PageIndex * @PageSize) AS VARCHAR)
-- ORDER BY ' + @OrderExpression
PRINT @SQL
SET NOCOUNT ON
EXECUTE(@SQL)
SET NOCOUNT OFF
RETURN @@RowCount
END
GO
/*
* 查询
* 普通查询
*/
IF OBJECT_ID('usp_GetObj','P') IS NOT NULL
DROP PROC usp_GetObj
GO
CREATE PROC usp_GetObj
@SelectList VARCHAR(2000), --欲选择字段列表
@TableSource VARCHAR(100), --表名或视图表
@SearchCondition VARCHAR(2000), --查询条件
@OrderExpression VARCHAR(1000) --排序表达式
AS
BEGIN
IF @SelectList IS NULL OR LTRIM(RTRIM(@SelectList))=''
BEGIN
SET @SelectList='*'
END
PRINT @SelectList
SET @SearchCondition=ISNULL(@SearchCondition,'')
SET @SearchCondition=LTRIM(RTRIM(@SearchCondition))
IF @SearchCondition <>''
BEGIN
SET @SearchCondition=' WHERE '+@SearchCondition
END
PRINT @SearchCondition
SET @OrderExpression=ISNULL(@OrderExpression,'')
SET @OrderExpression=LTRIM(RTRIM(@OrderExpression))
IF @OrderExpression <>''
BEGIN
IF UPPER(SUBSTRING(@OrderExpression,1,5))<>'WHERE'
BEGIN
SET @OrderExpression=' ORDER BY '+@OrderExpression
END
END
PRINT @OrderExpression
DECLARE @SQL VARCHAR(4000)
SET @SQL='SELECT '+@SelectList+' FROM
'+@TableSource+@SearchCondition+@OrderExpression
PRINT @SQL
SET NOCOUNT ON
EXECUTE(@SQL)
SET NOCOUNT OFF
RETURN @@RowCount
END
GO
/*
* 数量查询
*/
IF OBJECT_ID('usp_GetCount','P') IS NOT NULL
DROP PROC usp_GetCount
GO
CREATE PROC usp_GetCount
@Count INT OUTPUT, --数量输出
@TableName VARCHAR(100), --表名或者视图名称
@SearchWhere VARCHAR(1000) --查询调价
AS
IF @SearchWhere IS NOT NULL OR LTRIM(RTRIM(@SearchWhere))=''
BEGIN
SET @SearchWhere = ' WHERE '+@SearchWhere
END
DECLARE @SQL NVARCHAR(1200)
SET @SQL=N'SELECT @Count = COUNT(*) FROM '+ @TableName
+@SearchWhere
EXEC sp_executesql @SQL,N'@Count INT OUTPUT',@Count OUTPUT
GO
* 增加
*/
IF OBJECT_ID('usp_InsertObj','P') IS NOT NULL
DROP PROC usp_InsertObj
GO
CREATE PROC usp_InsertObj
@InsertList VARCHAR(2000), --欲更新字段列表
@TableSource VARCHAR(100), --表名或视图表
@valueList VARCHAR(2000) --赋值
AS
BEGIN
BEGIN TRANSACTION
DECLARE @errorSum INT
SET @errorSum=0
IF @InsertList IS NOT NULL OR LTRIM(RTRIM(@InsertList))<>''
BEGIN
SET @InsertList=' ( '+@InsertList+' )'
END
PRINT @InsertList
SET @valueList=ISNULL(@valueList,'')
SET @valueList=LTRIM(RTRIM(@valueList))
IF @valueList<>''
BEGIN
SET @valueList=' VALUES ( '+@valueList+' )'
END
PRINT @valueList
DECLARE @SQL VARCHAR(2000)
SET @SQL='INSERT INTO '+@TableSource+@InsertList+@valueList
PRINT @SQL
SET NOCOUNT ON
EXEC(@SQL)
SET @errorSum=@errorSum+@@ERROR
SET NOCOUNT OFF
IF @errorSum<>0
BEGIN
PRINT '添加失败'
ROLLBACK TRANSACTION
END
ELSE
BEGIN
PRINT '添加成功'
COMMIT TRANSACTION
END
RETURN @@RowCount
END
GO
/*
* 数据删除
*/
IF OBJECT_ID('usp_DeleteObj','P') IS NOT NULL
DROP PROC usp_DeleteObj
GO
CREATE PROC usp_DeleteObj
@TableSource VARCHAR(100), --表名或视图表
@DeleteCondition VARCHAR(2000) --查询条件
AS
BEGIN
BEGIN TRANSACTION
DECLARE @errorSum INT
SET @DeleteCondition=ISNULL(@DeleteCondition,'')
SET @DeleteCondition=LTRIM(RTRIM(@DeleteCondition))
IF @DeleteCondition<>''
BEGIN
SET @DeleteCondition=' WHERE '+@DeleteCondition
END
PRINT @DeleteCondition
DECLARE @SQL VARCHAR(2000)
SET @SQL='DELETE FROM '+@TableSource
+@DeleteCondition
PRINT @SQL
SET NOCOUNT ON
EXEC(@SQL)
SET @errorSum=@errorSum+@@ERROR
SET NOCOUNT OFF
IF @errorSum<>0
BEGIN
PRINT '更新失败'
ROLLBACK TRANSACTION
END
ELSE
BEGIN
PRINT '更新成功'
COMMIT TRANSACTION
END
RETURN @@RowCount
END
GO
/*
* 数据更新
*/
IF OBJECT_ID('usp_UpdateObj','P') IS NOT NULL
DROP PROC usp_UpdateObj
GO
CREATE PROC usp_UpdateObj
@UpdateList VARCHAR(2000), --欲更新字段列表
@TableSource VARCHAR(100), --表名或视图表
@UpdateCondition VARCHAR(2000) --查询条件
AS
BEGIN
BEGIN TRANSACTION
DECLARE @errorSum INT
SET @UpdateCondition=ISNULL(@UpdateCondition,'')
SET @UpdateCondition=LTRIM(RTRIM(@UpdateCondition))
IF @UpdateCondition<>''
BEGIN
SET @UpdateCondition=' WHERE '+@UpdateCondition
END
PRINT @UpdateCondition
DECLARE @SQL VARCHAR(2000)
SET @SQL='UPDATE '+@TableSource+'
'+@UpdateList+' '+@UpdateCondition
PRINT @SQL
SET NOCOUNT ON
EXEC(@SQL)
SET @errorSum=@errorSum+@@ERROR
SET NOCOUNT OFF
IF @errorSum<>0
BEGIN
PRINT '更新失败'
ROLLBACK TRANSACTION
END
ELSE
BEGIN
PRINT '更新成功'
COMMIT TRANSACTION
END
RETURN @@RowCount
END
GO
/*
* 查询
* 支持分页
*/
IF OBJECT_ID('usp_GetRecordFromPage','P') IS NOT NULL
DROP PROC usp_GetRecordFromPage
GO
CREATE PROC usp_GetRecordFromPage
@SelectList VARCHAR(2000), --欲选择字段列表
@TableSource VARCHAR(100), --表名或视图表
@SearchCondition VARCHAR(2000), --查询条件
@OrderExpression VARCHAR(1000), --排序表达式
@PageIndex INT=1, --页号,从0开始
@PageSize INT=10 --页尺寸
AS
BEGIN
IF @SelectList IS NULL OR LTRIM(RTRIM(@SelectList))=''
BEGIN
SET @SelectList='*'
END
PRINT @SelectList
SET @SearchCondition=ISNULL(@SearchCondition,'')
SET @SearchCondition=LTRIM(RTRIM(@SearchCondition))
IF @SearchCondition <>''
BEGIN
SET @SearchCondition='WHERE '+@SearchCondition
END
PRINT @SearchCondition
SET @OrderExpression=ISNULL(@OrderExpression,'')
SET @OrderExpression=LTRIM(RTRIM(@OrderExpression))
IF @OrderExpression <>''
BEGIN
IF UPPER(SUBSTRING(@OrderExpression,1,5))<>'WHERE'
BEGIN
SET @OrderExpression='ORDER BY '+@OrderExpression
END
END
PRINT @OrderExpression
IF @PageIndex IS NULL OR @PageIndex<1
BEGIN
SET @PageIndex=1
END
PRINT @PageIndex
IF @PageSize IS NULL OR @PageSize<1
BEGIN
SET @PageSize=10
END
PRINT @PageSize
DECLARE @SQL VARCHAR(4000)
SET @SQL='SELECT '+@SelectList+',RowNumber
FROM
(SELECT ' + @SelectList + ',ROW_NUMBER() OVER( '+ @OrderExpression +') AS RowNumber
FROM '+@TableSource+' '+ @SearchCondition +') AS RowNumberTableSource
WHERE RowNumber BETWEEN ' + CAST(((@PageIndex - 1)* @PageSize+1) AS VARCHAR)
+ ' AND ' +
CAST((@PageIndex * @PageSize) AS VARCHAR)
-- ORDER BY ' + @OrderExpression
PRINT @SQL
SET NOCOUNT ON
EXECUTE(@SQL)
SET NOCOUNT OFF
RETURN @@RowCount
END
GO
/*
* 查询
* 普通查询
*/
IF OBJECT_ID('usp_GetObj','P') IS NOT NULL
DROP PROC usp_GetObj
GO
CREATE PROC usp_GetObj
@SelectList VARCHAR(2000), --欲选择字段列表
@TableSource VARCHAR(100), --表名或视图表
@SearchCondition VARCHAR(2000), --查询条件
@OrderExpression VARCHAR(1000) --排序表达式
AS
BEGIN
IF @SelectList IS NULL OR LTRIM(RTRIM(@SelectList))=''
BEGIN
SET @SelectList='*'
END
PRINT @SelectList
SET @SearchCondition=ISNULL(@SearchCondition,'')
SET @SearchCondition=LTRIM(RTRIM(@SearchCondition))
IF @SearchCondition <>''
BEGIN
SET @SearchCondition=' WHERE '+@SearchCondition
END
PRINT @SearchCondition
SET @OrderExpression=ISNULL(@OrderExpression,'')
SET @OrderExpression=LTRIM(RTRIM(@OrderExpression))
IF @OrderExpression <>''
BEGIN
IF UPPER(SUBSTRING(@OrderExpression,1,5))<>'WHERE'
BEGIN
SET @OrderExpression=' ORDER BY '+@OrderExpression
END
END
PRINT @OrderExpression
DECLARE @SQL VARCHAR(4000)
SET @SQL='SELECT '+@SelectList+' FROM
'+@TableSource+@SearchCondition+@OrderExpression
PRINT @SQL
SET NOCOUNT ON
EXECUTE(@SQL)
SET NOCOUNT OFF
RETURN @@RowCount
END
GO
/*
* 数量查询
*/
IF OBJECT_ID('usp_GetCount','P') IS NOT NULL
DROP PROC usp_GetCount
GO
CREATE PROC usp_GetCount
@Count INT OUTPUT, --数量输出
@TableName VARCHAR(100), --表名或者视图名称
@SearchWhere VARCHAR(1000) --查询调价
AS
IF @SearchWhere IS NOT NULL OR LTRIM(RTRIM(@SearchWhere))=''
BEGIN
SET @SearchWhere = ' WHERE '+@SearchWhere
END
DECLARE @SQL NVARCHAR(1200)
SET @SQL=N'SELECT @Count = COUNT(*) FROM '+ @TableName
+@SearchWhere
EXEC sp_executesql @SQL,N'@Count INT OUTPUT',@Count OUTPUT
GO
相关文章推荐
- SQL Server的通用分页存储过程 未使用游标,速度更快!
- 使用AspNetPager分页控件、分页存储过程及用户控件基类实现的完美分页功能
- 使用Dapper接收多个结果集,并实现存储过程分页
- 使用系统存储过程实现的通用分页存储过程
- 原创:SQL Server的通用分页存储过程,未使用游标,速度更快!
- 使用李天平代码生成器中分页存储过程的问题
- asp.net之DataList的使用方法,及分页(存储过程创建),编辑,更新,删除
- MSSQL根据表名动态分页的存储过程以及C#.net调用使用
- SqlServer中使用row_number() over实现通用的分页存储过程
- 海量数据分页存储过程及使用
- SQL分页参数传值 在存储过程中使用 动态SQL实现
- sqlserver 通用存储过程分页代码(附使用ROW_NUMBER()和不使用ROW_NUMBER()两种情况性能分析)
- 如何删除一个表中重复的记录? 、、游标,存储过程的使用
- 分页存储过程(一)使用sql2005的新函数构造分页存储过程
- SQL Server 公共分页存储过程及使用方法
- AspNetPager控件分页(使用控件自动生成的存储过程)
- SQL Server的通用分页存储过程 未使用游标,速度更快!
- 使用数据库存储过程完成一个简单分页
- 存储过程和分页控件的使用