关于sql server临时表的应用
大家看我下面的存储过程,有兴趣一起讨论一下:
CREATE PROCEDURE dbo.Pub_GetPageData
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) -- 需要返回的列
as
declare @strSQL nvarchar(4000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
Set @strSQL = 'select IDENTITY(int, 1,1) AS ID_Num,* into #MyTempTable from emp_vBasicinfobrowse order by nid asc'
exec @strSql
select * from #MyTempTable
GO
如果写成上面的那样,调用是提示 找不到 #MyTempTable
CREATE PROCEDURE dbo.qq
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) -- 需要返回的列
as
declare @strSQL nvarchar(4000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
--Set @strSQL = 'select IDENTITY(int, 1,1) AS ID_Num,* into #MyTempTable from emp_vBasicinfobrowse order by nid asc'
--exec @strSql
select IDENTITY(int, 1,1) AS ID_Num,* into #MyTempTable from emp_vBasicinfobrowse order by nid asc
select * from #MyTempTable
GO
写成上面这样就ok,请问各位碰到这样的情况没,是怎么做的,希望能得到你的帮助,在线等。。。。
问题点数:50、回复次数:7Top
1 楼wangtiecheng(不知不为过,不学就是错!)回复于 2005-12-28 14:26:53 得分 50
要么使用你第二种方法,要么像下面改一下第一种
CREATE PROCEDURE dbo.Pub_GetPageData
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) -- 需要返回的列
as
declare @strSQL nvarchar(4000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
Set @strSQL = 'select IDENTITY(int, 1,1) AS ID_Num,* into #MyTempTable from emp_vBasicinfobrowse order by nid asc'
exec @strSql + ' select * from #MyTempTable'
GOTop
2 楼wangtiecheng(不知不为过,不学就是错!)回复于 2005-12-28 14:29:34 得分 0
最后一句应该带()
exec (@strSql + ' select * from #MyTempTable')Top
3 楼lsqkeke(可可)回复于 2005-12-28 14:30:34 得分 0
我试了下楼主说的情况,在执行动态SQL语句中有领时表时,提示找不到该对象!
Top
4 楼lsqkeke(可可)回复于 2005-12-28 14:33:09 得分 0
我也想知道原因,楼上说的是可以执行成功的!
退出来怎么就不可了呢?Top
5 楼wangtiecheng(不知不为过,不学就是错!)回复于 2005-12-28 14:38:58 得分 0
动态语句创建的临时表,在执行完后系统就自动清除了,
可以在exec语句中创建,并selectTop
6 楼wangtiecheng(不知不为过,不学就是错!)回复于 2005-12-28 14:43:34 得分 0
declare @num int, @sql nvarchar(4000), @tbName varchar(100)
set @tbName='tb'
set @sql='select @a=count(*) from dbo.sysobjects where id = object_id(N''[dbo].[' + @tbName + ']'') and OBJECTPROPERTY(id, N''IsUserTable'') = 1'
exec sp_executesql @sql,N'@a int output',@num output
if @num=1
print '存在表'
else
print '不存在'
Top
7 楼rouqu(石林#黄果树)回复于 2005-12-28 15:03:26 得分 0
CREATE PROCEDURE dbo.Pub_GetPageData
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) -- 需要返回的列
as
declare @strSQL nvarchar(4000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
Set @strSQL = 'select IDENTITY(int, 1,1) AS ID_Num,* into #MyTempTable from emp_vBasicinfobrowse order by nid asc'
Set @strSql = @strSql + ' select * from #MyTempTable'
exec @strSql
GO
Top




