想了好几天都没想出个办法,才来问的,请大家帮帮忙吧。
是这样的:
我写了个存储过程,需要允许多个用户并发连接,
所以只能用局部临时表了,
但这时候有个问题:
写局部临时表的时候是在execute()里面写的,(不用execute()而直接用
select *....的话将发生类型转换的错误,比如:
select a into #temp where a in (@str) order by a desc
a是int,@str是varchar的,直接这样写会出错,而用
@query='select a into #temp where a in ('+@str+')order by a desc'
execute(@query)则没问题.
但用execute(@query)的话,里面的临时表在这句完了也就没了,而我后面正需要这个表..
怎么办...请大家帮忙..谢谢

解决方案 »

  1.   

    提前创建临时表,如:create table #t(id int)exec ('insert into #t select 1')select * from #tdrop table #t
      

  2.   

    不行的,exec()里面执行过临时表的作用域就没了,因为在exec()中那个level会比外面的+1,而临时表的话一出了作用域就自动没了..这个我试过不行的...
      

  3.   

    这种写法是可以的:create table #t(id int)select * from #texec ('insert into #t select 1')select * from #tdrop table #t你可以试一下。但在Exec()中创建的临时表,在外部是无法访问的。
      

  4.   

    不知道为什么..在java里调用这个存储过程的时候说
    create 那一句有语法错误..可是我没写错...
      

  5.   

    什么错误?贴出来。把你的SQL代码也贴出来。
      

  6.   

    查询分析器里面没问题..不过经常这里没问题的到java中一调用就出错了
      

  7.   

    除了这种方式,再就是把使用局部临时表的SQL语句也写在同一个Exec(@sql)的@sql中来处理。
      

  8.   

    Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]第 1 行: ')' 附近有语法错误。
    这个是jbuilder报的错
    sql的话就是在execute()前面加了
    create table #temp(a bigint,b bigint)
      

  9.   

    除了这种方式,再就是把使用局部临时表的SQL语句也写在同一个Exec(@sql)的@sql中来处理。
                                                                    ~~~~这个我也试过,因为后面的很长,exec()里面可以执行多条语句的吗?我这样写好象没用:
    exec(@queryStr+'select * from #tmp')
      

  10.   

    create table #temp1(a int,b int)

    SELECT @queryStr  = 'SELECT a,b INTO #temp1 FROM Data WHERE a IN (' + @whereStr + ') ORDER BY a Desc' 

    SELECT @whereStr  = '' 

    -- Executing the above string
    EXECUTE (@queryStr)
    恩,就是这段,
      

  11.   

    exec ()中可以执行多条SQL语句。如:
    exec ('create table #t(id int) insert into #t(id) select 1 select * from #t')
      

  12.   

    create table #temp1(a int,b int)

    SELECT @queryStr  = 'SELECT a,b INTO #temp1 FROM Data WHERE a IN (' + @whereStr + ') ORDER BY a Desc' 

    SELECT @whereStr  = '' 

    -- Executing the above string
    EXECUTE (@queryStr)-->改为
    create table #temp1(a int,b int)

    SELECT @queryStr  = 'insert INTO #temp1 (a,b) SELECT a,b  FROM Data WHERE a IN (' + @whereStr + ') ORDER BY a Desc' 

    SELECT @whereStr  = '' 

    -- Executing the above string
    EXECUTE (@queryStr)
      

  13.   

    你用的是存储过程吗?
    存储过程怎么会出现Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]第 1 行: ')' 附近有语法错误。有问题也会是显示sp_**第n行怎么怎么样
      

  14.   

    我也是这么放的。。但就是太长了。。查询管理器里倒没错,java中来个语法错。。
    sigh~~
    exec()里面定义游标并且使用游标也没问题的吧?
      

  15.   

    把你的代码改为:
    create table #temp1(a int,b int)
    --主要是下面这句
    SELECT @queryStr  = 'insert INTO #temp1 (a,b) SELECT a,b  FROM Data WHERE a IN (' + @whereStr + ') ORDER BY a Desc' 

    SELECT @whereStr  = '' 

    -- Executing the above string
    EXECUTE (@queryStr)
      

  16.   

    是java里调用存储过程出的错了...
    我试下上面那位大哥贴的方法先..谢谢
      

  17.   

    啊。果然没报错了..谢谢wangtiecheng大哥..
      

  18.   

    这个问题应该很好解决,你把@str当输入参数处理一下不就ok了么?