存储过程里临时表可能出错,清指教

来自故乡的风 2013-10-17 11:52:27
下面是我写的一个存储过程,用于一个ASP.NET网站。功能是把两个表的内容合起来,写到一个临时表中,统一输出结果,最后删除临时表。

一般情况运行正常,但有时会有出错信息,估计是临时表#myTempTable的问题。请问高手,有没有好的解决方案?谢谢!


ALTER PROCEDURE [dbo].[spTeacherNoticesByYear]
@year integer,
@OrderByClause varchar(50) = 'ORDER BY X_Date DESC'

AS
BEGIN

SET NOCOUNT ON;

SELECT * INTO #myTempTable FROM (
SELECT X_Type=99, N_ID AS X_ID, N_Title AS X_Title, N_Date AS X_Date FROM tblTeacherNotices WHERE YEAR(N_Date)=@year
UNION ALL
SELECT X_Type=1, D_ID AS X_ID, D_Title AS X_Title, D_Date AS X_Date FROM tblTeacherDocs WHERE YEAR(D_Date)=@year
) AS temp

-- Create a variable @SQLStatement
DECLARE @SQLStatement varchar(255)

SELECT @SQLStatement = 'SELECT * FROM #myTempTable ' + @OrderByClause

EXEC(@SQLStatement)

drop table #myTempTable

END
...全文
139 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andy__Huang 2013-10-18
  • 打赏
  • 举报
回复
@OrderByClause varchar(50) = 'ORDER BY X_Date DESC' 你传一个表达式不太好吧,传一个标识就可以了,比如:0 表示asc,1 表示desc 然后 SELECT @SQLStatement = 'SELECT * FROM #myTempTable order by x_date ' + case when @OrderByClause=0 then 'asc' else 'desc' end
LongRui888 2013-10-18
  • 打赏
  • 举报
回复
我刚才试了一下,执行了好多遍,也没有报错。 能说一下,具体是报的上面错误吗? 在原来的公司项目上经常用临时表,一般就是报临时表已存在的错误,一般在存储过程中,可以这样修改:

--判断临时表是否已经存在,如果存在,就删除
if object_id('tempdb..#myTempTable') is not null
   drop table #myTempTable

select * into ……
發糞塗牆 2013-10-18
  • 打赏
  • 举报
回复
一个#的是局部临时表,存在与一个会话中,不能共享,但是##可以共享
来自故乡的风 2013-10-18
  • 打赏
  • 举报
回复
具体哪里出错不知道,因为调试的时候没问题。也不是排序字符串太长的问题。 等我按#3楼#5楼朋友的建议再试一下。不是说本地临时表不能同别人共享吗?临时表有可能已经存在吗? 非常感谢各位高手的帮助!!!
唐诗三百首 2013-10-18
  • 打赏
  • 举报
回复
@OrderByClause varchar(50) --> 会不会有时传入的排序条件写得太长,长度超过50,导致字符串被截断, 最终执行的@SQLStatement也就出错了.
發糞塗牆 2013-10-18
  • 打赏
  • 举报
回复
什么错?临时表已存在?如果是,就用if object_id('tempdb..#临时表名','u') is not null drop talbe #xx这样来先删除再into生成
来自故乡的风 2013-10-18
  • 打赏
  • 举报
回复
引用 1 楼 hdhai9451 的回复:
@OrderByClause varchar(50) = 'ORDER BY X_Date DESC' 你传一个表达式不太好吧,传一个标识就可以了,比如:0 表示asc,1 表示desc 然后 SELECT @SQLStatement = 'SELECT * FROM #myTempTable order by x_date ' + case when @OrderByClause=0 then 'asc' else 'desc' end
缺省是按日期排序,还有按其它字段排序(姓名、标题等)。如果用变量表示,query会写很长。 多谢回复!
为什么要学习这门课程?·新一代流式数据湖技术组件深入讲解,帮助你快速构造数据湖知识体系。·为构建湖仓一体架构提供底层技术支撑。本课程将从原理、架构、底层存储细节、性能优化、管理等层面对Paimon流式数据湖组件进行详细讲解,原理+实战,帮助你快速上手使用数据湖技术。讲师介绍华为HCIP认证大数据高级工程师北京猎豹移动大数据技术专家中科院大数据研究院大数据技术专家51CTO企业IT学院优秀讲师电子工业出版社2022年度优秀作者出版书籍:《Flink入门与实战》、《大数据技术及架构图解实战派》。本课程提供配套课件、软件、试题、以及源码。课程内容介绍:1、什么是Apache Paimon2、Paimon的整体架构3、Paimon的核心特点4、Paimon支持的生态5、基于Flink SQL操作Paimon6、基于Flink DataStream API 操作Paimon7、Paimon中的内部表和外部表8、Paimon中的分区表和临时表9、Paimon中的Primary Key表(主键表)10、Paimon中的Append Only表(仅追加表)11、Changelog Producers原理及案例实战12、Merge Engines原理及案例实战13、Paimon中的Catalog详解14、Paimon中的Table详解15、Paimon之Hive Catalog的使用16、动态修改Paimon表属性17、查询Paimon系统表18、批量读取Paimon表19、流式读取Paimon表20、流式读取高级特性Consumer ID21、Paimon CDC数据摄取功能22、CDC之MySQL数据同步到Paimon23、CDC之Kafka数据同步到Paimon24、CDC高级特性之Schema模式演变25、CDC高级特性之计算列26、CDC高级特性之特殊的数据类型映射27、CDC高级特性之中文乱码28、Hive引擎集成Paimon29、在Hive中配置Paimon依赖30、在Hive中读写Paimon表31、在Hive中创建Paimon表32、Hive和Paimon数据类型映射关系33、Paimon底层文件基本概念34、Paimon底层文件布局35、Paimon底层文件操作详解36、Flink流式写入Paimon表过程分析37、读写性能优化详细分析38、Paimon中快照、分区、小文件的管理39、管理标签(自动管理+手工管理)40、管理Bucket(创建+删除+回滚)

34,588

社区成员

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

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