问题是这个样子的。数据库sql2005 调用程序 vc++
------------------------------------------首先,我写了个存储过程,查询得到一组数据。然后要在VC++程序上显示这一组数据。vc的程序我不熟悉,同事说让我把 查询得到的数据插入一个临时表,然后他调用我的存储过程,得到一个临时的表,然后在用程序去查这个临时表中的数据。--------------------------------------我现在有一些疑问。1.数据库在服务器上,每个客户端触发事件,执行存储过程产生一个临时表,如果同时触发是不是会因为产生2个相同名的临时表而发生冲突?2.如果如此频繁的使用临时表,对服务器系统资源的消耗是不是很大?3.最糟糕的是,如果这个方法可行,查询出一组数据 该如何导入一个临时表,大家能不能教教我怎么写???4.有没有别的什么方法? 比如不用临时表,而是查询得到的数据导入一个试图,或者触发器之类的方法,又该怎么写?因为第一次与 vc程序结合,不熟悉,希望大家多多帮助,谢谢了...我的存储过程是:
ALTER PROCEDURE [dbo].[WinFormConfigExhibitStandByID]
-- Add the parameters for the stored procedure here
@ExhibitID int,
@XYrowcol nvarchar(50) output,         --终端所处的 行-列   (第一个要传出的参数)
@PhoneInfo nvarchar(50) output,   --终端的品牌 型号     (第二个要传出的参数)
@TerminalID int output            --终端id              (第三个要传出的参数)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;    -- Insert statements for procedure here
SELECT @XYrowcol=(str(XRow)+'--'+ltrim(str(YColumn))),@PhoneInfo=(c.BrandName+' '+b.TerminalModel),@TerminalID=a.TerminalID from InteHel_ExhibitTerminal a 
inner join InteHel_Terminal b on a.TerminalID=b.TerminalID
inner join InteHel_Brand c on b.BrandID=c.BrandID
where a.ExhibitID=@ExhibitID
END

解决方案 »

  1.   

    1 每个临时表只在当前进程可见
    2 可能的
    3 select * into #temp from tb
    4 可以用查询视图的方法得出结果,视图不是一个容器或者结果集 是一个查询.触发器只在insert update的时候 触发
      

  2.   

    不导入临时表#tmp,而是导入到临时使用时创建的表tmp,这是两个完全不同的概念.
    每次别人使用完毕后删除tmp而你判断到tmp存在则不进行数据插入,如果不存在,创建tmp,导入数据.
      

  3.   

    1.不会  要相信SQL的锁机制
    2。临时表是很好的处理方式 用完释放掉就好
    3。
    4。触发器是不推荐的 视图可以考虑 毕竟可以精简过程
    5。以上纯属个人的一点烂意见 不足之处 请你原谅
      

  4.   

    其实不用这么麻烦的,你可以用存储过程直接返回一个表类型信息,客户端调用 返回一个数据集就行了。
    在你的存储过程里,就表变量就行了。 create procedure ProcName
      @param1 param1Type,....
     as
      set nocount on --和create table语句语法类似,列名 后接 列类型就够了,是你返回表的结构
     declare @t table(id int,[name] varchar(20)....)  insert into @t (feild1,field2....)
          select .....
          from ....
          where ...
          group by ...
          order by ....  set nocount off
        
      select * from @t
      

  5.   

    貌似1楼的这个 语法不太对啊
    不能忽悠我啊...
    if object_id(N'[tempdb].[dbo].[#Sun_Tmpone]') is not null 
    drop table #Sun_Tmpone   
    create table #Sun_Tmpone 
    (
        ID   int IDENTITY (1,1)   not null, 
        XYrowcol  nvarchar(50),  
        PhoneInfo nvarchar(50),
    TerminalID int
        primary key (ID)     
    )
    select * into  #Sun_Tmpone from
    (
    SELECT (str(XRow)+'--'+ltrim(str(YColumn))) as XYrowcol ,(c.BrandName+' '+b.TerminalModel) as PhoneInfo,a.TerminalID from InteHel_ExhibitTerminal a 
    inner join InteHel_Terminal b on a.TerminalID=b.TerminalID
    inner join InteHel_Brand c on b.BrandID=c.BrandID
    where a.ExhibitID=5
    )
    Select * from #Sun_Tmpone    
    truncate table #Sun_Tmpone
      

  6.   

    select * into #temp from tb 能这么写???
      

  7.   

    这样写能行,如果有这个#TEMP的话会报错的
      

  8.   


    select * into  #Sun_Tmpone from
    (
        SELECT (str(XRow)+'--'+ltrim(str(YColumn))) as XYrowcol ,(c.BrandName+' '+b.TerminalModel) as PhoneInfo,a.TerminalID from InteHel_ExhibitTerminal a 
        inner join InteHel_Terminal b on a.TerminalID=b.TerminalID
        inner join InteHel_Brand c on b.BrandID=c.BrandID
        where a.ExhibitID=5
    )那我这么写的有错了? 
      

  9.   

    select * into  #Sun_Tmpone from
    (
        SELECT (str(XRow)+'--'+ltrim(str(YColumn))) as XYrowcol ,(c.BrandName+' '+b.TerminalModel) as PhoneInfo,a.TerminalID from InteHel_ExhibitTerminal a 
        inner join InteHel_Terminal b on a.TerminalID=b.TerminalID
        inner join InteHel_Brand c on b.BrandID=c.BrandID
        where a.ExhibitID=5
    )t----这里加个t
      

  10.   


    我创建之前 会删除一次的。但现在 貌似 from 后的那个 (这里select出来数据)这么写 不对啊。
      

  11.   


    恩,这个我刚刚忘了,后来加了 还是不行。我执行if object_id(N'[tempdb].[dbo].[#Sun_Tmpone]') is not null 
    drop table #Sun_Tmpone   命令成功!
    在执行create table #Sun_Tmpone 
    (
        ID   int IDENTITY (1,1)   not null, 
        XYrowcol  nvarchar(50),  
        PhoneInfo nvarchar(50),
    TerminalID int
        primary key (ID)     
    )命令成功!在执行select * into  #Sun_Tmpone from
    (
    SELECT (str(XRow)+'--'+ltrim(str(YColumn))) as XYrowcol ,(c.BrandName+' '+b.TerminalModel) as PhoneInfo,a.TerminalID from InteHel_ExhibitTerminal a 
    inner join InteHel_Terminal b on a.TerminalID=b.TerminalID
    inner join InteHel_Brand c on b.BrandID=c.BrandID
    where a.ExhibitID=5
    ) tempsun
    的时候 就会报 数据库中已存在名为 '#Sun_Tmpone' 的对象。 这个错误了。
      

  12.   

    select ... into ...from
    会自己创建表 不用人为的创建
      

  13.   

    临时表方便的就是先删除,再重建。
    在select into 前判断表是否存在,如果存在,则删除。
      

  14.   

    是的而且if object_id(N'[tempdb].[dbo].[#Sun_Tmpone]') is not null 
    drop table #Sun_Tmpone   
    GO  -----这里加个GO
      

  15.   


    大哥,我也想啊。.net里面 封装了 dataset datatable  IList 之类的东西vc我就不知道了,我同事找我要的要么是个长 字符串,他去分割,要么就是1个临时表 他去查。你说我能咋搞