<script type="text/javascript"> </script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script> |
大家看我下面的存储过程,有兴趣一起讨论一下:
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,请问各位碰到这样的情况没,是怎么做的,希望能得到你的帮助,在线等。。。。
要么使用你第二种方法,要么像下面改一下第一种
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
最后一句应该带()
exec (@strSql + ' select * from #MyTempTable')
我试了下楼主说的情况,在执行动态SQL语句中有领时表时,提示找不到该对象!
我也想知道原因,楼上说的是可以执行成功的!
退出来怎么就不可了呢?
动态语句创建的临时表,在执行完后系统就自动清除了,
可以在exec语句中创建,并select
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 '不存在'
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