VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3761|回复: 25

分页排序存储过程出错,求助

[复制链接]

1

主题

17

帖子

15.00

积分

新手上路

Rank: 1

积分
15.00
发表于 2020-3-3 03:00:01 | 显示全部楼层 |阅读模式
ALTER PROCEDURE dbo.VerseLogPaging
       
@SortColumn as varchar(100) = null,
@StartRow as int = null,
@StopRow as int = null
AS

---- 建立有标识符列的table变量
declare @t_table table
(
[rownum] [int] IDENTITY (1, 1) Primary key NOT NULL ,
[SortColumn] [varchar] (40) ,
[VerseNumber] [varchar] (20) ,
[SubmitTime] [datetime] (20) ,
[VerseText] [varchar] (500) ,
[UserID] [varchar] (20)
)

---- 在返回指定的@StopRow行数之后停止处理查询
Set RowCount @StopRow

---- 插入到table变量中
insert @t_table
(
[VerseNumber],[SubmitTime],[VerseText],[UserID])
SELECT [VerseNumber],[SubmitTime],[VerseText],[UserID]

FROM ConstructionVerseLog
order by @SortColumn


---- 返回到正确的结果
SELECT * FROM @t_table WHERE rownum >= @StartRow
ORDER BY rownum

        /* SET NOCOUNT ON */
        RETURN

错误:
1:[SubmitTime] [datetime] (20)  ,声明datetime类型时出错
2:order by @SortColumn ,使用传递参数时出错

请问要如何修改啊
回复

使用道具 举报

0

主题

114

帖子

69.00

积分

新手上路

Rank: 1

积分
69.00
发表于 2020-5-14 15:00:01 | 显示全部楼层
declare @t_table table
(
[rownum] [int] IDENTITY (1, 1) Primary key NOT NULL ,
[SortColumn] [varchar] (40) ,
[VerseNumber] [varchar] (20) ,
[SubmitTime] [datetime] ,  不用加后面的
[VerseText] [varchar] (500) ,
[UserID] [varchar] (20)
)
回复

使用道具 举报

0

主题

114

帖子

69.00

积分

新手上路

Rank: 1

积分
69.00
发表于 2020-5-14 18:15:01 | 显示全部楼层
order by SortColumn
回复

使用道具 举报

2

主题

18

帖子

16.00

积分

新手上路

Rank: 1

积分
16.00
发表于 2020-5-14 22:45:01 | 显示全部楼层
1.
[SubmitTime] [datetime] (20) ,
改为
[SubmitTime] [datetime]  ,

2.order by @SortColumn
要使用动态SQL
回复

使用道具 举报

0

主题

211

帖子

108.00

积分

新手上路

Rank: 1

积分
108.00
发表于 2020-5-14 23:00:01 | 显示全部楼层
1:[SubmitTime] [datetime] (20)  ,声明datetime类型时出错

[SubmitTime] [datetime], --datetime不用指定長度
回复

使用道具 举报

0

主题

40

帖子

29.00

积分

新手上路

Rank: 1

积分
29.00
发表于 2020-5-15 17:45:01 | 显示全部楼层
把datetime (20)的(20)去掉
回复

使用道具 举报

1

主题

17

帖子

15.00

积分

新手上路

Rank: 1

积分
15.00
 楼主| 发表于 2020-5-16 22:15:01 | 显示全部楼层
排序如何实现
回复

使用道具 举报

0

主题

211

帖子

108.00

积分

新手上路

Rank: 1

积分
108.00
发表于 2020-5-17 11:30:02 | 显示全部楼层
--try

ALTER PROCEDURE dbo.VerseLogPaging
       
@SortColumn as varchar(100) = null,
@StartRow as int = null,
@StopRow as int = null
AS

declare @sql varchar(8000)
---- 建立有标识符列的table变量
set @sql='
declare @t_table table
(
[rownum] [int] IDENTITY (1, 1) Primary key NOT NULL ,
[SortColumn] [varchar] (40) ,
[VerseNumber] [varchar] (20) ,
[SubmitTime] [datetime],
[VerseText] [varchar] (500) ,
[UserID] [varchar] (20)
)
'
---- 在返回指定的@StopRow行数之后停止处理查询
Set RowCount @StopRow

---- 插入到table变量中
set @sql=@sql+
'
insert @t_table
(
[VerseNumber],[SubmitTime],[VerseText],[UserID])
SELECT [VerseNumber],[SubmitTime],[VerseText],[UserID]
FROM ConstructionVerseLog
order by ['+@SortColumn+'] '

---- 返回到正确的结果
set @sql=@sql+
' SELECT * FROM @t_table WHERE rownum >='+ @StartRow +
' ORDER BY rownum '
EXEC(@sql)
Set RowCount 0 --最好加上這句

        /* SET NOCOUNT ON */
        RETURN
回复

使用道具 举报

1

主题

17

帖子

15.00

积分

新手上路

Rank: 1

积分
15.00
 楼主| 发表于 2020-5-19 13:30:01 | 显示全部楼层
楼上的
order by ['+@SortColumn+'] 还是出错
这样传递貌似没区别
回复

使用道具 举报

0

主题

211

帖子

108.00

积分

新手上路

Rank: 1

积分
108.00
发表于 2020-5-19 16:00:01 | 显示全部楼层
你把@sql打印出來看看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表