我在Delphi6.0里用如下语句创建临时表,
  sql := 'CREATE TABLE #tempmat (';
  sql := sql+'selected [bit] NULL default (0),';
  sql := sql+'code [char] (6)  NOT NULL ,';
  sql := sql+'name [char] (20)  NULL ,';
  sql := sql+'pname [char] (40)  NULL ,';
  sql := sql+'price [money] NULL ,';
  sql := sql+'pno [int] NULL )';
  
  adoquery.Close();
  adoquery.SQL.Clear();
  adoquery.SQL.Add(sql);
  adoquery.ExecSQL;
但程序运行时报错,提示‘对象名#tempmat无效’,这是怎么回事?
建立其它临时表也是这样的情况,应该不关SQL语句的事。

解决方案 »

  1.   

    先在SQL控制台里建一张表,然后导出SQL语句一看就明白了
      

  2.   

    局部临时表在本次交互后就删除了,可能是你后面使用的时候出的问题;
    我想你可能需要全局临时表,表前面加##
    sql := 'CREATE TABLE ##tempmat (';
    .....
      
      

  3.   

    CREATE TABLE [dbo].[tempmat] (
    [selected] [bit] NULL ,
    [code] [char] (6) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [name] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [pname] [char] (40) COLLATE Chinese_PRC_CI_AS NULL ,
    [price] [money] NULL ,
    [pno] [int] NULL 
    ) ON [PRIMARY]
    GOALTER TABLE [dbo].[tempmat] WITH NOCHECK ADD 
    CONSTRAINT [DF_tempmat_selected] DEFAULT (0) FOR [selected]表名不可以用#
      

  4.   

    我上述的建临时表的语句绝对是正确的,已在查询分析器里成功运行过,
    但在Delphi里通过ADOQuery执行时,在CREATE TABLE #tempmat这一句就报错了,
    所以zjf27(How d you d) 说的不对,且我要建的是临时表,怎能不用号呢?
    firetoucher(蹈火者) 所说的也解决不了问题,因为第一句就报错,不存在
    您说的问题。
    到底你们有没有用ADOQuery建过临时表呀?
      

  5.   

    我试过用存储过程来建立临时表,但当存储过程一执行完毕,临时表就消失了达不到我的要求。
    我只是觉得奇怪,为什么上述建立临时表的语句,我在普通的TQuery控件里可以成功执行,
    但是在TADOQuery控件里就不行?有谁试过这样的情况?