我的存储过程
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[ceekay]@TableNames VARCHAR(200), --表名,可以是多个表,但不能用别名@PrimaryKey VARCHAR(100), --主键,可以为空,但@Order为空时该值不能为空@Fields VARCHAR(200), --要取出的字段,可以是多个表的字段,可以为空,为空表示select *@PageSize INT, --每页记录数@CurrentPage INT, --当前页,0表示第1页@Filter VARCHAR(200) = '', --条件,可以为空,不用填 where@Group VARCHAR(200) = '', --分组依据,可以为空,不用填 group by@Order VARCHAR(200) = '' --排序,可以为空,为空默认按主键升序排列,不用填 order byASBEGINDECLARE @SortColumn VARCHAR(200)DECLARE @Operator CHAR(2)DECLARE @SortTable VARCHAR(200)DECLARE @SortName VARCHAR(200)IF @Fields = ''SET @Fields = '*'IF @Filter = ''SET @Filter = 'WHERE 1=1'ELSESET @Filter = 'WHERE ' + @FilterIF @Group <>''SET @Group = 'GROUP BY ' + @GroupIF @Order <> ''BEGINDECLARE @pos1 INT, @pos2 INTSET @Order = REPLACE(REPLACE(@Order, ' asc', ' ASC'), ' desc', ' DESC')IF CHARINDEX(' DESC', @Order) > 0IF CHARINDEX(' ASC', @Order) > 0BEGINIF CHARINDEX(' DESC', @Order) < CHARINDEX(' ASC', @Order)SET @Operator = '<='ELSESET @Operator = '>='ENDELSESET @Operator = '<='ELSESET @Operator = '>='SET @SortColumn = REPLACE(REPLACE(REPLACE(@Order, ' ASC', ''), ' DESC', ''), ' ', '')SET @pos1 = CHARINDEX(',', @SortColumn)IF @pos1 > 0SET @SortColumn = SUBSTRING(@SortColumn, 1, @pos1-1)SET @pos2 = CHARINDEX('.', @SortColumn)IF @pos2 > 0BEGINSET @SortTable = SUBSTRING(@SortColumn, 1, @pos2-1)IF @pos1 > 0SET @SortName = SUBSTRING(@SortColumn, @pos2+1, @pos1-@pos2-1)ELSESET @SortName = SUBSTRING(@SortColumn, @pos2+1, LEN(@SortColumn)-@pos2)ENDELSEBEGINSET @SortTable = @TableNamesSET @SortName = @SortColumnENDENDELSEBEGINSET @SortColumn = @PrimaryKeySET @SortTable = @TableNamesSET @SortName = @SortColumnSET @Order = @SortColumnSET @Operator = '>='ENDDECLARE @type varchar(50)DECLARE @prec intSELECT @type=t.name, @prec=c.precFROM sysobjects oJOIN syscolumns c on o.id=c.idJOIN systypes t on c.xusertype=t.xusertypeWHERE o.name = @SortTable AND c.name = @SortNameIF CHARINDEX('char', @type) > 0SET @type = @type + '(' + CAST(@prec AS varchar) + ')'DECLARE @TopRows INTSET @TopRows = @PageSize * @CurrentPage + 1print @TopRowsprint @OperatorEXEC('DECLARE @SortColumnBegin ' + @type + 'SET ROWCOUNT ' + @TopRows + 'SELECT @SortColumnBegin=' + @SortColumn + ' FROM ' + @TableNames + ' ' + @Filter + ' ' + @Group + ' ORDER BY ' + @Order + 'SET ROWCOUNT ' + @PageSize + 'SELECT ' + @Fields + ' FROM ' + @TableNames + ' ' + @Filter + ' AND ' + @SortColumn + '' + @Operator + '@SortColumnBegin ' + @Group + ' ORDER BY ' + @Order + '')END
调用如下USE [DataBase]
GODECLARE @return_value intEXEC @return_value = [dbo].[ceekay]
@TableNames = N'TB_User join TB_UserInfo on TB_User.u_Id= TB_UserInfo.u_Uid join TB_Supply on TB_UserInfo.u_Uid=TB_Supply.s_Uid ',
@PrimaryKey = N'TB_Supply.s_Id',
@Fields = N'TB_User.u_Id,TB_User.u_State,TB_User.u_State2,TB_User.u_Type,TB_UserInfo.u_Id,TB_UserInfo.u_UserName,TB_UserInfo.u_Uid,TB_UserInfo.u_Province,TB_UserInfo.u_City,TB_Supply.s_Id,TB_Supply.s_Title,TB_Supply.s_Content,TB_Supply.s_Slt,TB_Supply.s_Iid1 ',
@PageSize = 30,
@CurrentPage = 1,
@Filter = N's_Iid1=809',
@Order = N's_Order desc,s_Hits desc'SELECT 'Return Value' = @return_valueGO错误
31
<=
消息 156,级别 15,状态 1,第 5 行
关键字 'SET' 附近有语法错误。
消息 137,级别 15,状态 1,第 7 行
必须声明标量变量 "@SortColumnBegin"。
消息 137,级别 15,状态 2,第 11 行
必须声明标量变量 "@SortColumnBegin"。(1 行受影响)
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[ceekay]@TableNames VARCHAR(200), --表名,可以是多个表,但不能用别名@PrimaryKey VARCHAR(100), --主键,可以为空,但@Order为空时该值不能为空@Fields VARCHAR(200), --要取出的字段,可以是多个表的字段,可以为空,为空表示select *@PageSize INT, --每页记录数@CurrentPage INT, --当前页,0表示第1页@Filter VARCHAR(200) = '', --条件,可以为空,不用填 where@Group VARCHAR(200) = '', --分组依据,可以为空,不用填 group by@Order VARCHAR(200) = '' --排序,可以为空,为空默认按主键升序排列,不用填 order byASBEGINDECLARE @SortColumn VARCHAR(200)DECLARE @Operator CHAR(2)DECLARE @SortTable VARCHAR(200)DECLARE @SortName VARCHAR(200)IF @Fields = ''SET @Fields = '*'IF @Filter = ''SET @Filter = 'WHERE 1=1'ELSESET @Filter = 'WHERE ' + @FilterIF @Group <>''SET @Group = 'GROUP BY ' + @GroupIF @Order <> ''BEGINDECLARE @pos1 INT, @pos2 INTSET @Order = REPLACE(REPLACE(@Order, ' asc', ' ASC'), ' desc', ' DESC')IF CHARINDEX(' DESC', @Order) > 0IF CHARINDEX(' ASC', @Order) > 0BEGINIF CHARINDEX(' DESC', @Order) < CHARINDEX(' ASC', @Order)SET @Operator = '<='ELSESET @Operator = '>='ENDELSESET @Operator = '<='ELSESET @Operator = '>='SET @SortColumn = REPLACE(REPLACE(REPLACE(@Order, ' ASC', ''), ' DESC', ''), ' ', '')SET @pos1 = CHARINDEX(',', @SortColumn)IF @pos1 > 0SET @SortColumn = SUBSTRING(@SortColumn, 1, @pos1-1)SET @pos2 = CHARINDEX('.', @SortColumn)IF @pos2 > 0BEGINSET @SortTable = SUBSTRING(@SortColumn, 1, @pos2-1)IF @pos1 > 0SET @SortName = SUBSTRING(@SortColumn, @pos2+1, @pos1-@pos2-1)ELSESET @SortName = SUBSTRING(@SortColumn, @pos2+1, LEN(@SortColumn)-@pos2)ENDELSEBEGINSET @SortTable = @TableNamesSET @SortName = @SortColumnENDENDELSEBEGINSET @SortColumn = @PrimaryKeySET @SortTable = @TableNamesSET @SortName = @SortColumnSET @Order = @SortColumnSET @Operator = '>='ENDDECLARE @type varchar(50)DECLARE @prec intSELECT @type=t.name, @prec=c.precFROM sysobjects oJOIN syscolumns c on o.id=c.idJOIN systypes t on c.xusertype=t.xusertypeWHERE o.name = @SortTable AND c.name = @SortNameIF CHARINDEX('char', @type) > 0SET @type = @type + '(' + CAST(@prec AS varchar) + ')'DECLARE @TopRows INTSET @TopRows = @PageSize * @CurrentPage + 1print @TopRowsprint @OperatorEXEC('DECLARE @SortColumnBegin ' + @type + 'SET ROWCOUNT ' + @TopRows + 'SELECT @SortColumnBegin=' + @SortColumn + ' FROM ' + @TableNames + ' ' + @Filter + ' ' + @Group + ' ORDER BY ' + @Order + 'SET ROWCOUNT ' + @PageSize + 'SELECT ' + @Fields + ' FROM ' + @TableNames + ' ' + @Filter + ' AND ' + @SortColumn + '' + @Operator + '@SortColumnBegin ' + @Group + ' ORDER BY ' + @Order + '')END
调用如下USE [DataBase]
GODECLARE @return_value intEXEC @return_value = [dbo].[ceekay]
@TableNames = N'TB_User join TB_UserInfo on TB_User.u_Id= TB_UserInfo.u_Uid join TB_Supply on TB_UserInfo.u_Uid=TB_Supply.s_Uid ',
@PrimaryKey = N'TB_Supply.s_Id',
@Fields = N'TB_User.u_Id,TB_User.u_State,TB_User.u_State2,TB_User.u_Type,TB_UserInfo.u_Id,TB_UserInfo.u_UserName,TB_UserInfo.u_Uid,TB_UserInfo.u_Province,TB_UserInfo.u_City,TB_Supply.s_Id,TB_Supply.s_Title,TB_Supply.s_Content,TB_Supply.s_Slt,TB_Supply.s_Iid1 ',
@PageSize = 30,
@CurrentPage = 1,
@Filter = N's_Iid1=809',
@Order = N's_Order desc,s_Hits desc'SELECT 'Return Value' = @return_valueGO错误
31
<=
消息 156,级别 15,状态 1,第 5 行
关键字 'SET' 附近有语法错误。
消息 137,级别 15,状态 1,第 7 行
必须声明标量变量 "@SortColumnBegin"。
消息 137,级别 15,状态 2,第 11 行
必须声明标量变量 "@SortColumnBegin"。(1 行受影响)
解决方案 »
- sql2005不打开表直接查询?
- 用 "select * from 图书" 这个语句查询得到的所有字段中,有几个数值字段都是4位小数,有什么办法将这些字段统一都变成2位小数
- 求一个存储过程,随机取出一条visible为0的记录,改变visible的值,传回该条记录
- cast()函数与convert()函数转换小数时,为何不进行四舍五入呢?
- 请问在VB里用事务,调用一个存储过程出错,是否会ROLLBACK?
- 关于超大数据量的统计问题
- -- 高中学的组合公式,有人能用SQL Server 写个函数么?--
- 还是没解决啊
- server
- SQL server2000里northwind系统视图,希望新建一个视图可以显示每个customer每年的消费情况,求代码
- 有哪个高手可以把access改为sql呢?一个简单的系统~
- 文件上传和下载
http://blog.csdn.net/lxy_abcde1190/archive/2008/04/18/2303333.aspx
http://www.cnblogs.com/cn5135/articles/356819.html
--调用如下 USE [DataBase]
GO DECLARE @return_value int EXEC @return_value = [dbo].[ceekay]
@TableNames = N'TB_User join TB_UserInfo on TB_User.u_Id= TB_UserInfo.u_Uid join TB_Supply on TB_UserInfo.u_Uid=TB_Supply.s_Uid ',
@PrimaryKey = N'TB_Supply.s_Id',
@Fields = N'TB_User.u_Id,TB_User.u_State,TB_User.u_State2,TB_User.u_Type,TB_UserInfo.u_Id,TB_UserInfo.u_UserName,TB_UserInfo.u_Uid,TB_UserInfo.u_Province,TB_UserInfo.u_City,TB_Supply.s_Id,TB_Supply.s_Title,TB_Supply.s_Content,TB_Supply.s_Slt,TB_Supply.s_Iid1 ',
@PageSize = 30,
@CurrentPage = 1,
@Filter = N's_Iid1=809',
@Order = N's_Order desc,s_Hits desc' SELECT 'Return Value' = @return_value GO