还是这个问题:无法移除"'tempTablePage1'",因为它在系统目录中不存在

haonanernet 2007-05-17 04:25:35
http://community.csdn.net/Expert/topic/5537/5537878.xml?temp=.4858362
...全文
279 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wgsasd311 2007-05-18
  • 打赏
  • 举报
回复
---下面是用临时表实现分页
CREATE PROCEDURE spSelectListDynamicPaged2
(
@SelectStatement nvarchar(4000),
@FromStatement nvarchar(2000),
@WhereStatement nvarchar(4000),
@OrderByExpression nvarchar(500),
--add @AscOrDesc
@AscOrDesc nvarchar(10),
@RecordCount int,
@PageSize int,
@PageIndex int,
@DoCount bit
)

AS

SET NOCOUNT ON

IF(@DoCount=1)
--if do count, return the count simply

EXEC('SELECT count(*) FROM '+@FromStatement+' WHERE 1=1 '+@WhereStatement)
ELSE
BEGIN

declare @nCount as int
declare @nTotalPage As int
declare @sSelectCopy As nvarchar(2000)
declare @TempTable As nvarchar(100)

if isnull(@WhereStatement,'') = ''
begin
set @WhereStatement = '1=1'
end
else
begin
set @WhereStatement = right(ltrim(@WhereStatement),len(ltrim(@WhereStatement))-3)
end


if isnull(@OrderByExpression,'') = ''
begin
set @OrderByExpression = '1'
end



set @SelectStatement = 'select top 100000000 ' + @SelectStatement
--新改的
declare @sql nvarchar(4000)
set @sql=N'select a.* , identity(int,1,1) as NumberIndex into tempTablePage1 from (' + @SelectStatement + ' from ' + @FromStatement + ' where ' + @WhereStatement + ' order by ' + @OrderByExpression + ' ' + @AscOrDesc +') as a'
+N' set @nCount = (select max(NumberIndex) from tempTablePage1)'
+N' if @nCount % @PageSize > 0 '
+N' set @nTotalPage = @nCount / @PageSize + 1'
+N' else'
+N' set @nTotalPage = @nCount / @PageSize'

+N' if @PageIndex <= 0 '
+N' set @PageIndex = 1'
+N' else if @PageIndex > @nTotalPage'
+N' set @PageIndex = @nTotalPage'
+N' if @PageIndex < @nTotalPage'
+N' select * from tempTablePage1 where NumberIndex between (@PageIndex - 1)*@PageSize + 1 and @PageIndex*@PageSize'
+N' else if @PageIndex = @nTotalPage'
+N' select * from tempTablePage1 where NumberIndex between (@PageIndex-1)*@PageSize + 1 and @nCount '
EXEC(@sql)

end
GO
wgsasd311 2007-05-18
  • 打赏
  • 举报
回复
--try
CREATE PROCEDURE spSelectListDynamicPaged2
(
@SelectStatement nvarchar(4000),
@FromStatement nvarchar(2000),
@WhereStatement nvarchar(4000),
@OrderByExpression nvarchar(500),
--add @AscOrDesc
@AscOrDesc nvarchar(10),
@RecordCount int,
@PageSize int,
@PageIndex int,
@DoCount bit
)

AS

SET NOCOUNT ON

IF(@DoCount=1)
--if do count, return the count simply

EXEC('SELECT count(*) FROM '+@FromStatement+' WHERE 1=1 '+@WhereStatement)
ELSE
BEGIN

declare @nCount as int
declare @nTotalPage As int
declare @sSelectCopy As nvarchar(2000)
declare @TempTable As nvarchar(100)

if isnull(@WhereStatement,'') = ''
begin
set @WhereStatement = '1=1'
end
else
begin
set @WhereStatement = right(ltrim(@WhereStatement),len(ltrim(@WhereStatement))-3)
end


if isnull(@OrderByExpression,'') = ''
begin
set @OrderByExpression = '1'
end



set @SelectStatement = 'select top 100000000 ' + @SelectStatement

--下面是新改的
while (select 1 from sysobjects where id = object_id('tempTablePage1') and type = 'U')>0
WAITFOR DELAY '00:00:00.100' --说明有人正在执行此存储过程,所以需要等别人执行完,才能往下运行

exec ('select a.* , identity(int,1,1) as NumberIndex into tempTablePage1 from (' + @SelectStatement + ' from ' + @FromStatement + ' where ' + @WhereStatement + ' order by ' + @OrderByExpression + ' ' + @AscOrDesc +') as a')

set @nCount = (select max(NumberIndex) from tempTablePage1)
if @nCount % @PageSize > 0
begin
set @nTotalPage = @nCount / @PageSize + 1
end
else
begin
set @nTotalPage = @nCount / @PageSize
end

if @PageIndex <= 0
begin
set @PageIndex = 1
end
else if @PageIndex > @nTotalPage
begin
set @PageIndex = @nTotalPage
end


if @PageIndex < @nTotalPage
begin
select * from tempTablePage1 where NumberIndex between (@PageIndex - 1)*@PageSize + 1 and @PageIndex*@PageSize
end
else if @PageIndex = @nTotalPage
begin
select * from tempTablePage1 where NumberIndex between (@PageIndex-1)*@PageSize + 1 and @nCount
end

--最后要记得删除
drop table tempTablePage1

end
GO

haonanernet 2007-05-18
  • 打赏
  • 举报
回复
wangtiecheng(不知不为过,不学就是错!) 像上面这么改错在哪呢?
haonanernet 2007-05-18
  • 打赏
  • 举报
回复



CREATE PROCEDURE spSelectListDynamicPaged2
(
@SelectStatement nvarchar(4000),
@FromStatement nvarchar(2000),
@WhereStatement nvarchar(4000),
@OrderByExpression nvarchar(500),
--add @AscOrDesc
@AscOrDesc nvarchar(10),
@RecordCount int,
@PageSize int,
@PageIndex int,
@DoCount bit
)

AS

SET NOCOUNT ON

IF(@DoCount=1)
--if do count, return the count simply

EXEC('SELECT count(*) FROM '+@FromStatement+' WHERE 1=1 '+@WhereStatement)
ELSE
BEGIN
declare @nCount as int
declare @nTotalPage As int
declare @sSelectCopy As nvarchar(2000)
declare @TempTable As nvarchar(100)

if isnull(@WhereStatement,'') = ''
begin
set @WhereStatement = '1=1'
end
else
begin
set @WhereStatement = right(ltrim(@WhereStatement),len(ltrim(@WhereStatement))-3)
end


if isnull(@OrderByExpression,'') = ''
begin
set @OrderByExpression = '1'
end

if exists (select 1 from sysobjects where id = object_id('#tempTablePage1') and type = 'U')
begin
drop table #tempTablePage1
end

set @SelectStatement = 'select top 100000000 ' + @SelectStatement
--创建一个临时表
exec (N'select a.* , identity(int,1,1) as NumberIndex into #tempTablePage1 from (' + @SelectStatement + N' from ' + @FromStatement + N' where ' + @WhereStatement + N' order by ' + @OrderByExpression + ' ' + @AscOrDesc +N') as a'
+N' set '+@nCount+N' = (select max(NumberIndex) from #tempTablePage1) '
+N' if '+@nCount+N' % '+@PageSize+N' > 0 '
+N' begin '
+N' set '+@nTotalPage+N' = '+@nCount+N' / '+@PageSize+N' + 1 '
+N' end '
+N' else '
+N' begin '
+N' set '+@nTotalPage+N' = '+@nCount+N' / '+@PageSize
+N' end '

+N' if '+@PageIndex+N' <= 0 '
+N' begin '
+N' set '+@PageIndex+N' = 1 '
+N' end '
+N' else if '+@PageIndex+N' > '+@nTotalPage
+N' begin '
+N' set '+@PageIndex+N' = '+@nTotalPage
+N' end '


+N' if '+@PageIndex+N' < '+@nTotalPage
+N' begin '
+N' select * from #tempTablePage1 where NumberIndex between ('+@PageIndex+N' - 1)*'+@PageSize+N' + 1 and '+@PageIndex+N'*'+@PageSize
+N' end '
+N' else if '+@PageIndex+N' = '+@nTotalPage
+N' begin '
+N' select * from #tempTablePage1 where NumberIndex between ('+@PageIndex+N'-1)*'+@PageSize+N' + 1 and '+@nCount
+N' end '
)
if exists (select 1 from sysobjects where id = object_id('#tempTablePage1') and type = 'u')
begin
drop table #tempTablePage1
end

end
GO
shawnwan 2007-05-18
  • 打赏
  • 举报
回复
支持存储过程
wgsasd311 2007-05-18
  • 打赏
  • 举报
回复
--纠正下上面临时表的存储过程如下,如还有错误,请楼主告诉我,先谢了:)
---下面是用临时表实现分页
CREATE PROCEDURE spSelectListDynamicPaged2
(
@SelectStatement nvarchar(4000),
@FromStatement nvarchar(2000),
@WhereStatement nvarchar(4000),
@OrderByExpression nvarchar(500),
--add @AscOrDesc
@AscOrDesc nvarchar(10),
@RecordCount int,
@PageSize int,
@PageIndex int,
@DoCount bit
)

AS

SET NOCOUNT ON

IF(@DoCount=1)
--if do count, return the count simply

EXEC('SELECT count(*) FROM '+@FromStatement+' WHERE 1=1 '+@WhereStatement)
ELSE
BEGIN

declare @nCount as int
declare @nTotalPage As int
declare @sSelectCopy As nvarchar(2000)
declare @TempTable As nvarchar(100)

if isnull(@WhereStatement,'') = ''
begin
set @WhereStatement = '1=1'
end
else
begin
set @WhereStatement = right(ltrim(@WhereStatement),len(ltrim(@WhereStatement))-3)
end


if isnull(@OrderByExpression,'') = ''
begin
set @OrderByExpression = '1'
end



set @SelectStatement = 'select top 100000000 ' + @SelectStatement
--新改的
declare @sql nvarchar(4000)
set @sql=N'select a.* , identity(int,1,1) as NumberIndex into #tempTablePage1 from (' + @SelectStatement + ' from ' + @FromStatement + ' where ' + @WhereStatement + ' order by ' + @OrderByExpression + ' ' + @AscOrDesc +') as a'

+N' set @nCount = (select max(NumberIndex) from #tempTablePage1)'
+N' if @nCount % @PageSize > 0 '
+N' set @nTotalPage = @nCount / @PageSize + 1'
+N' else'
+N' set @nTotalPage = @nCount / @PageSize'

+N' if @PageIndex <= 0 '
+N' set @PageIndex = 1'
+N' else if @PageIndex > @nTotalPage'
+N' set @PageIndex = @nTotalPage'
+N' if @PageIndex < @nTotalPage'
+N' select * from #tempTablePage1 where NumberIndex between (@PageIndex - 1)*@PageSize + 1 and @PageIndex*@PageSize'
+N' else if @PageIndex = @nTotalPage'
+N' select * from #tempTablePage1 where NumberIndex between (@PageIndex-1)*@PageSize + 1 and @nCount '

EXEC SP_EXECUTESQL @sql,N'@nCount int
,@PageSize int
,@nTotalPage int
,@PageIndex int ',
@nCount
,@PageSize
,@nTotalPage
,@PageIndex

end
GO
OracleRoob 2007-05-17
  • 打赏
  • 举报
回复
exec ('select a.* , identity(int,1,1) as NumberIndex into tempTablePage1 from (' + @SelectStatement + ' from ' + @FromStatement + ' where ' + @WhereStatement + ' order by ' + @OrderByExpression + ' ' + @AscOrDesc +') as a')

这里面的tempTablePage1 替换为临时表#tempTablePage1 ,并把之后的所有SQL都写到这个Exec 的动态脚本中。因为在Exec动态创建的临时表,在外部无法访问。
jyxhz 2007-05-17
  • 打赏
  • 举报
回复
用事务把整个存储过程包住
OracleRoob 2007-05-17
  • 打赏
  • 举报
回复
像这种业务,最好使用局部临时表,如:#临时表名

这样就不会冲突了。

但是需要注意:如果要在生成临时表后再使用,不能在动态SQL中创建,需要先创建好表结构。
下载代码方式:https://pan.quark.cn/s/a4b39357ea24 Node.js作为一个运行环境,其基础是Chrome的V8引擎,它最突出的优势在于能够支持JavaScript代码在服务器端执行,从而为网络应用程序创造了一个全新的执行平台。在Node.js生态,文件系统的相关操作由fs模块承担,而fs.readFile作为其的关键方法,专门用于实现文件内容的获取。本文旨在全面阐释fs.readFile方法的相关信息,包括其功能说明、语法结构、参数配置、应用范例以及源代码实现,以供那些需要在Node.js环境进行文件操作的程序员参考。 fs.readFile方法具备异步特性,意味着它在执行文件读取任务时不会断当前程序的运行流程,使得程序的其他部分能够同步执行。该方法的工作流程是:一旦调用,Node.js会立即反馈执行信号,然后在后台线程执行文件读取任务。当文件读取任务完成后,Node.js会通过一个预设的回调函数来处理读取结果或识别错误。 fs.readFile方法的语法结构如下: fs.readFile(path[, options], callback) - path:一个必须的参数,其数据类型可以是字符串、Buffer或Uint8Array,用于指示文件的具体位置或文件描述符。 - options:一个可选参数,形式为一个对象,用于设定文件的编码格式及打开模式。该对象可以包含encoding(字符编码,默认值为null,此时返回Buffer对象)和flag(文件打开模式,默认值为r,代表只读模式)。 - callback:一个必须的回调函数,在文件读取任务结束后被触发。若读取过程出现错误,err参数将包含错误详情,否则为n...

34,875

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧