PRB: Error Messaging Referencing #Temp Table with ADO-SQLOLEDB
http://support.microsoft.com/default.aspx?scid=kb;en-us;235340

解决方案 »

  1.   

    问题解决了,谢谢 vivianfdlpw() ,真的很感谢,我承诺给你150分,*^O^*...... 书到用时方很少啊!我也经常用SET NOCOUNT ON,但是就是没有想到用Provider=SQLOLEDB.1是返回一个计数列影响,而没有返回我SELECT出来的集合!
    贴出我的SP,其实很简单,本来用不着用SP,但是我觉得在前台产生一个序号非常慢,所以就用SP:if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[CE_LIST_PRT]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[CE_LIST_PRT]
    GOSET QUOTED_IDENTIFIER ON 
    GO
    SET ANSI_NULLS ON 
    GO
    --SET NOCOUNT ON /*写在SP外面没有用哦,这个不属于SP的CODE,只是在我编写,产生SP的这个SESSION有效*/
    GO
    create proc dbo.[CE_LIST_PRT]
    as 
    SET NOCOUNT ON  --写在SP里面
    SELECT IDENTITY(INT,1,1) AS PR_SN,PR_NO,PR_NAM,PR_TYPE INTO #TT 
    FROM CE_PRT Order By PR_NO
    select * from #TT ;
    RETURN 0GO
      

  2.   

    难得见 MorningTea发帖哦。
    顶一下, 顺便蹭点分。
      

  3.   

    可是给你50分(我给 vivianfdlpw,只能增加50分),不过一定要回答我一个问题,等我想好了call你,呵呵
      

  4.   

    问题已经想到:
    有一个公证测试系统,功能:内部申请测试公司测试产品,
    以得到一个以第三方标准对产品的质量鉴定有一个表CE_TESTFEE:測試項目費用維護
    索引键:CTF_TENO + CTF_CPNO 
    CTF_TENO   測試項目代號
    CTF_CPNO 公司代號
    CTF_FEE費用
    CTF_CCUNO 幣別代號
    CTF_CUSER修改人員
    CTF_CDAT 修改日期
    CTF_DEFAULT 是否默認值另外一个表CE_CET_D:公證測試表項目明細資料
    CED_T_CODE 測試項目代號
    CET_TEST_COMP:測試公司
    CED_UP:产生费用
    CED_CUR:币别
    ....现在要做的是,CE_CET_D表的CED_T_CODE已经写入,
    但是CET_TEST_COMP,CED_UP,CED_CUR为空,
    假如CE_TESTFEE表如此设计,一个测试项目对应多个测试公司,
    有多笔资料,对于同一个测试项目,有多笔资料设为默认值(即CTF_DEFAULT为1:TRUE)
    那么我在UPDATE CE_CET_D表的时候,我要带入默认值,
    并且要每个测试项目带入第一个DEFAULT,那么我要如何写呢?我用:
    UPDATE D
    SET D.CET_TEST_COMP= T.CTF_CPNO
    D. CED_UP=T.CTF_FEE
    D. CED_CUR=T.CTF_CCUNO
    FROM CE_CET_D D,CE_TESTFEE  T
    WHERE D.CED_T_CODE = T.CTF_TENO
    AND T.CTF_DEFAULT = 1--我这样写,不是每个都带入第一个TOP 1的DEFAULT值,
    他是遇到第一次就第一个DEFAULT值,第二次就带入第二个DEFAULT值!
    你有办法做到吗?我有个多个DEFAULT值,
    但是你必须对每个测试项目带入第一个DEFAULT值,
    按照测试公司费用升序,费用最大的排在前面我已经做了修改,就是一个测试项目只能有一个DEFAULT,
    目前系统已经满足要求,不过我当初这种假设可以做到吗?只要帮我解决的,都给分,目前本人可用分不多,一个帖子不能给太多分,欠分的,我可以给的时候一定给!!3Q!
      

  5.   

    你应该再加个连接条件UPDATE D
    SET D.CET_TEST_COMP= T.CTF_CPNO
        ,D. CED_UP=T.CTF_FEE
        ,D. CED_CUR=T.CTF_CCUNO
    FROM  CE_CET_D D
    JOIN  CE_TESTFEE  T
    WHERE D.CED_T_CODE = T.CTF_TENO       --项目字段关联
          AND T.CTF_CPNO=D.CET_TEST_COMP  --公司字段关联
          AND T.CTF_DEFAULT = 1
      

  6.   

    你应该再加个连接条件UPDATE D
    SET D.CET_TEST_COMP= T.CTF_CPNO
        ,D. CED_UP=T.CTF_FEE
        ,D. CED_CUR=T.CTF_CCUNO
    FROM  CE_CET_D D
    JOIN  CE_TESTFEE  T
    ON    D.CED_T_CODE = T.CTF_TENO       --项目字段关联
          AND T.CTF_CPNO=D.CET_TEST_COMP  --公司字段关联
          AND T.CTF_DEFAULT = 1
      

  7.   

    vivianfdlpw() ,不是这样子的! D.CED_T_CODE = T.CTF_TENO       --项目字段关联
    没有T.CTF_CPNO=D.CET_TEST_COMP  --公司字段关联
    的条件,实际情况是这样,先是有公司送样品给我们,于是我们品管部的QA人员按需申请测试样品,于是便有CE_CET_D这个表的测试项目的产生,但是CET_TEST_COMP,CED_UP,CED_CUR为空,因为不确定给请那个公司(需要国际认证,所以会请公证行的公司)来帮我们测试,然后我们有维护一个表
    CE_TESTFEE,里面记录测试项目,测试公司,费用,币别,是否为default,
    假如我设计表CE_TESTFEE,某些测试项目可以有多笔default值,如果用户需要带入默认值,就update表CET_TEST_COMP,CED_UP,CED_CUR,这个带入是default为true,假如一个测试项目default可以有多笔,不同的公司,那么我每次要带入的是按公司代号升序,排在最前面的那一笔!!!所以就是测试公司还不知道,这个是要带入的东西!
    就是要货比三家,设定default值,然后选择top 1
      

  8.   

    --大致写了一下,具体细节可以要做点小修改
    --而且,我对你的原意有些不解
    --例如:"按照测试公司费用升序,费用最大的排在前面"
    UPDATE CE_CET_D
    SET CE_CET_D.CET_TEST_COMP= tt.CTF_CPNO
       ,CE_CET_D.CED_UP=tt.CTF_FEE
       ,CE_CET_D.CED_CUR=tt.CTF_CCUNO
    FROM (select top 1 t1.*
          from CE_TESTFEE as t1 join CE_CET_D as t2
          on t1.CTF_TENO=t2.CED_T_CODE
          where t1.CTF_DEFAULT = 1
          order by t1.CTF_FEE desc)tt
    where tt.CTF_TENO=CE_CET_D.CED_T_CODE
      

  9.   

    按照测试公司费用升序,费用最大的排在前面
    ===============>
    top 1 应该是费用最少的吧,别人帮你们测试,是你们付费的?
    如果CE_CET_D表只保存每个项目的最少费用纪录:UPDATE D
    SET D.CET_TEST_COMP= T.CTF_CPNO
        ,D. CED_UP=T.CTF_FEE
        ,D. CED_CUR=T.CTF_CCUNO
    FROM  CE_CET_D D
    JOIN  CE_TESTFEE  T
    ON    D.CED_T_CODE = T.CTF_TENO       --项目字段关联
          AND T.CTF_DEFAULT = 1
          AND T.CTF_FEE=(select min(CTF_FEE) from CE_TESTFEE 
                          where CTF_TENO=T.CTF_TENO)
      

  10.   

    是请SGS(瑞士通用公证行)、ITS(天祥公证行)、都是国际上很知名的公证行!是我们付费的!设置为默认值,也未必是价格最低的,不过你这样考虑也差不多了!我如果有时间,我做几个demo数据出来,大家等我哦,实在不好意思,周末了,人懒,问问题没有准备好表结构和数据,结果集!等我哦~~!!!!大家周末愉快~
      

  11.   

    --哦,问题没有很难,就是我自己为了偷懒,一时候有点想不开
    CREATE TABLE #CE_TESTFEE (
    [CTF_TENO] [varchar] (8)  ,
    [CTF_CPNO] [char] (10)  ,
    [CTF_FEE] [decimal](18, 2) ,
    [CTF_CCUNO] [char] (10)  ,
    [CTF_DEFAULT] [bit]  
    )
    GO
    CREATE TABLE #CE_CET_D (
    [CED_NO] [varchar] (8)  ,
    [CED_SN] [int]  ,
    [CED_T_CODE] [varchar] (8) ,
    [CET_TEST_COMP] [varchar] (40) ,
    [CED_UP] [decimal](18, 2) ,
    [CED_CUR] [varchar] (20) 
    )
    GOinsert into #CE_TESTFEE
    select 'A001','SGS-TW',354.50,'NT',0 union all
    select 'A001','ITS-GZ',152.69,'RMB',1 union all
    select 'A001','ITS-SZ',84.30,'RMB',1 union all
    select 'A002','SGS-TW',220.50,'NT',1 union all
    select 'A002','ITS-GZ',52.69,'RMB',1 union all
    select 'A002','ITS-SZ',50,'RMB',1 
    insert into #CE_CET_D
    select '05090401',1,'A001','',0,'' union all
    select '05090401',2,'A001','',0,'' union all
    select '05090401',3,'A002','',0,'' -- vivianfdlpw() 符合我的要求,因为我这里有个币别,所以
    --费用是不可比较的,没有汇率档,只要选择top 1,按照公司代号排序即可
    UPDATE D
    SET D.CET_TEST_COMP= T.CTF_CPNO,D. CED_UP=T.CTF_FEE,D. CED_CUR=T.CTF_CCUNO
    FROM  #CE_CET_D D
    JOIN  #CE_TESTFEE  T
    ON    D.CED_T_CODE = T.CTF_TENO       --项目字段关联
          AND T.CTF_CPNO=(select top 1  CTF_CPNO from #CE_TESTFEE 
                          where CTF_TENO=T.CTF_TENO and CTF_DEFAULT=1)/*
    CED_NO   CED_SN      CED_T_CODE CET_TEST_COMP                            CED_UP               CED_CUR              
    -------- ----------- ---------- ---------------------------------------- -------------------- -------------------- 
    05090401 1           A001       ITS-GZ                                   152.69               RMB       
    05090401 2           A001       ITS-GZ                                   152.69               RMB       
    05090401 3           A002       SGS-TW                                   220.50               NT        (3 row(s) affected)
    */
    -- filebat(Mark)和我当初写的思路差不多,也是走进一个误区
    UPDATE #CE_CET_D
    SET #CE_CET_D.CET_TEST_COMP= tt.CTF_CPNO
       ,#CE_CET_D.CED_UP=tt.CTF_FEE
       ,#CE_CET_D.CED_CUR=tt.CTF_CCUNO
    FROM (select top 1 t1.* --因为是top1,因为没有按照测试项目分类,
    --因此找出来是全部的top 1,因为只是更新了一笔
          from #CE_TESTFEE as t1 join #CE_CET_D as t2
          on t1.CTF_TENO=t2.CED_T_CODE
          where t1.CTF_DEFAULT = 1
          order by t1.CTF_FEE desc)tt
    where tt.CTF_TENO=#CE_CET_D.CED_T_CODE
    select * from #CE_CET_D
    /*
    CED_NO   CED_SN      CED_T_CODE CET_TEST_COMP                            CED_UP               CED_CUR              
    -------- ----------- ---------- ---------------------------------------- -------------------- -------------------- 
    05090401 1           A001                                                .00                  
    05090401 2           A001                                                .00                  
    05090401 3           A002       SGS-TW                                   220.50               NT        (3 row(s) affected)
    */