当前位置:K88软件开发文章中心编程语言SQLSQL01 → 文章内容

存储过程中select into 与临时表问题的解决方法

减小字体 增大字体 作者:wangsdong     来源:asp编程网  发布时间:2018-12-30 9:15:01

今天无意中发现sql语句中分号的好处
在写一个存储过程的时候,要将查询的语句放到一个临时表中去,需要使用到select * into
#p功能,sql的写法如下:
declare @strSql varchar(4000)
declare @wheresql varchar(4000)
set @wheresql=****
set @strSql=Nselect top 100 * into
#p from news where 1=1@wheresql order by news_id desc
EXEC(@strSql)
select * from
#p 
(这里提示
#p不存在)

原因:
#p属于局部临时表,局部临时表只在当前会话中有效,所以上面提示
#p不存在
解决的方法有两种
1、在sql语句前面使用create创建临时表
#p,然后使用inset into
#p execute(@strSql)把上面的sql语句执行效果插入到
#p中(注意要去掉上面语句中的into
#p两个词语),功能和上面一样。

2、还继续使用上面的sql语句,把select * from
#p也放到那个sql语句之中。这里就需要使用分号了。分号在sql语句中的意义是,一行的结束,即使一行sql语句之间使用分号了两个sql语句,同两行sql语句是一样的。
上面的存储过程的改成
declare @strSql varchar(4000)
declare @wheresql varchar(4000)
set @wheresql=****
set @strSql=Nselect top 100 * into
#p from news where 1=1@wheresql order by news_id desc
select * frorm
#p
EXEC(@strSql)
这样就没有问题了

这样也解决了select into 与临时表之间的问题了



存储过程中select into 与临时表问题的解决方法