我没看到错误,但我觉得这样会好些
CREATE PROCEDURE [dbo].[create_period_single0101e] 
@province int as 
if isnull(object_id('##period'),0)>0
drop table ##periodif @province=0 --select all provinces
select * into ##period from bkj0101e
else 
select * into ##period from bkj0101e where frta=@province
GO而且最好设置sqlserver可以select into/bulkcopy为真
exec sp_dboption 'select into/buldcopy',true

解决方案 »

  1.   

    看不出语法错误,估计是临时表没有释放。
    在“drop table ##period”中临时表的名字没有搞错吧?
    如果成功创建了这样一个临时表,那么在其它多个存储过程中都调用这个临时表##period能成功,当必须在一个“对话”中。
      

  2.   

    ##period是一個全域的Temp table,所以即使SP 執行完畢這個table也還是存在的。
    所以你這個Stored Procedure 如果是在同一個連線上執行兩次,或者是兩個人執行,都會出現你所說的錯誤。
      

  3.   

    我觉得是编译时不管if else,认为##period创建了两遍,应该用create table ##先把表建好,在分支中都用insert ## select ...就没问题了。
    多个存储过程中都调用就不会有问题,应该是创建了不同的实例
      

  4.   

    谢谢大家~~那个问题解决啦~~ ^0^不过现在又有新的问题了……我有一个表ABC,有两列a(文字),b(数字),
    我想在这个表的最后追加一行,a中写“合计”两个字,b中写:b这一列的值的和。
    有什么好办法么?我现在知道可以用select sum(b) from ABC这个命令将b中的值求和,
    可是不知道怎么把这个值赋给变量。
      

  5.   

    INSERT INTO TABLENAME
    SELECT '合计' TOTAL, SUM(B) FROM TABLENAME;
      

  6.   

    眼下还有个问题:就是我想建一个表,不过表名事先不确定,希望用变量来决定,我于是这样写:
    declare @name varchar(10) 
    set @name=^abc^
    create table dbo.@name
    (comm char(6) null,prsa char(3) null,tren char(1) null,trwa char(2) null,frta char(4),sumq bigint null,summ bigint null)
    但是不能运行,dbo.@name这样的表名是不允许的,有什么办法么?
    另外,我如果想从AAA.txt这样一个文件中读入数据放在表中,T-sql提供这样的方法么?AAA.txt文件内容是这样的:
    010128459000 0130430411029190561011029559 30150 135254 30150 
    010128459000 2250250231079150031031079559  3000   7200  3000 
    010129146900 0211611651029100231051029209 10000  48650 10000 
    010129146900 0230430911019190141011019209  5000  25672  5000 
    010129146900 0911611621109100021021109209 10000  95700 10000 
    010129146900 2211111132019190171032019209    15   2209    15 
    010129146900 2211111132019191701032019209  4000  16880  4000