如题

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/4708/4708503.xml?temp=.5122339
      

  2.   

    --用动态语句
    SELECT * INTO #TMP FROM ENG_MST WHERE USED='Y' AND IDCARD IS NOT NULL
     ALTER TABLE TEMPDB..#TMP ADD INS VARCHAR(10) NULLexec('UPDATE #TMP SET ENG_ID=@ENG_ID,III=''Y''  WHERE [ENG_ID]='+@ID)
      

  3.   

    create table t(id int)
    goinsert into t select 1
    insert into t select 2
    insert into t select 3
    goselect * into # from t
    exec('alter table # add rq varchar(10)')
    update # set rq='2005-01-01' where id=1
    select * from #drop table t,#
      

  4.   

    drop table #TMP
    go
    SELECT * INTO #TMP FROM ENG_MST WHERE USED='Y' AND IDCARD IS NOT NULL
    go
    ALTER TABLE #TMP ADD INS VARCHAR(10) NULL
    go
    UPDATE #TMP SET ENG_ID=@ENG_ID,INS='Y'  WHERE [ENG_ID]=@ID
    go这样有问题吗?
      

  5.   

    先告诉这一句中的
    @ENG_ID和@ID是怎么来的,说不定是他们在作怪~
      

  6.   


    --这里不要指定tempdb,直接用#tmp即可select * into #tmp from eng_mst where used='y' and idcard is not null
    alter table [tempdb..#tmp] add ins varchar(10) null-->select * into #tmp from eng_mst where used='y' and idcard is not null
    alter table #tmp add ins varchar(10) null
      

  7.   

    画蛇添足,去掉 TEMPDB..#TMP 这部分的前缀,直接用#TMP即可。#TMP是一个本地临时表,在当前会话中,可以直接引用本地临时表表名#TMP,但在TEMPDB库中,系统自动为该临时表#TMP增加了一个数字后缀,因此直接查询TEMPDB..#TMP会提示找不到临时表。
    以下内容摘自BOL:
    如果本地临时表由存储过程创建或由多个用户同时执行的应用程序创建,则 SQL Server 必须能够区分由不同用户创建的表。为此,SQL Server 在内部为每个本地临时表的表名追加一个数字后缀。存储在 tempdb 数据库的 sysobjects 表中的临时表,其全名由 CREATE TABLE 语句中指定的表名和系统生成的数字后缀组成。为了允许追加后缀,为本地临时表指定的表名 table_name 不能超过 116 个字符。
      

  8.   

    那我如果查询某个临时表是否存在时如何写呢?
    这样写不对吗?
    IF EXISTS(SELECT 1 FROM TEMPDB..SYSOBJECTS WHERE ID=1('tempdb..#TMP')AND XTYPE='U')
    DROP TABLE #TMP
      

  9.   

    可能和创建临时表的用户有关吧,因为#TMP是私有临时表,也就是说只能由创建者来使用会不会是因为这个原因,原则这么多的高手的办法都没有解决呢
      

  10.   

    如果是上面的问题,可以把临时表的名称改为##TMP(共公临时表),这样其他的用户就可以使用
      

  11.   

    SELECT * INTO #TMP FROM ENG_MST WHERE USED='Y' AND IDCARD IS NOT NULLALTER TABLE #TMP ADD INS VARCHAR(10) NULL
      

  12.   

    那我如果查询某个临时表是否存在时如何写呢?
    这样写不对吗?
    IF EXISTS(SELECT 1 FROM TEMPDB..SYSOBJECTS WHERE ID=1('tempdb..#TMP')AND XTYPE='U')
    DROP TABLE #TMP我晕请看清我提问的问题呀@!
      

  13.   

    创建#TMP后,在TEMPDB..SYSOBJECTS中保存的临时表的名字其实并不是#TMP,而是在其后增加了长长的后缀。
    在一个新的连接中,没有必要判断是否存在与要创建的临时表同名的临时表,因为一旦此会话结束后,临时表自动就清除了。