Sql 我如何正确地多次选择@tentable以返回单个结果集?

Sql 我如何正确地多次选择@tentable以返回单个结果集?,sql,sql-server-2005,tsql,Sql,Sql Server 2005,Tsql,我试图通过将多个查询合并到一个结果集中来为Crystal报表编写存储过程Crystal不支持一个报表中的多个结果 我试图获取的结果集合并了两个表中的列 在SP中,我声明@tentable和列,因为我查询的两个表有不同的列 DECLARE @TEMPNEWBILLING TABLE ( ACCOUNT DECIMAL null, CLIENT NVARCHAR null, TIMESTAMP INT null, BILLING DECIMAL null,

我试图通过将多个查询合并到一个结果集中来为Crystal报表编写存储过程Crystal不支持一个报表中的多个结果

我试图获取的结果集合并了两个表中的列

在SP中,我声明@tentable和列,因为我查询的两个表有不同的列

DECLARE @TEMPNEWBILLING TABLE
(
    ACCOUNT DECIMAL null,
    CLIENT NVARCHAR null,
    TIMESTAMP INT null,
    BILLING DECIMAL null, 
    CALLKIND INT null,
    HITK1 DECIMAL null,
    HITK2 DECIMAL null, 
    HIDISC DECIMAL null, 
    HITALK DECIMAL null, 
    HIPTCH DECIMAL null,
    HICONF DECIMAL null,
    HIHOLD DECIMAL null,
    PTCH DECIMAL null,
    SUPERTIME DECIMAL null
)
然后,我从两个表中选择临时表:

SELECT Account, Client, Timestamp, Billing, CallKind, HiTk1, HiTk2, HiDisc, HiTalk, HiPtch,     HiConf, HiHold, Ptch
 INTO TEMPNEWBILLING 
 FROM   
        mCallEnd
 WHERE  billing = cast(@BILLINGNUMBER as decimal)
    AND Timestamp > @STARTITIME
    AND Timestamp < @ENDITIME
    AND CallKind  in (0,1,2,3,4,16)

SELECT 
     Billing, SuperTime
 INTO TEMPNEWBILLING 
FROM
        mClientMaint
 WHERE  billing = cast(@BILLINGNUMBER as decimal)
    AND Timestamp > @STARTITIME
    AND Timestamp < @ENDITIME
不幸的是,出现了一些问题,因为当我运行SP时,出现了一个错误

数据库中已存在名为“tempnewilling”的对象

我已经检查过了,第一个查询似乎正在运行,但是在第二个Select Into时抛出了错误。我一定是做错了,因为如果我使用tables或@tables,即delcare-the-table和create-the-table,我会得到相同的错误

用两个查询的结果填充临时表是不可能的吗?我是否使用了错误的工具进行作业?

一旦创建了表,就需要使用INSERT。此外,您正在使用一个表变量,因此在引用它时需要在名称的开头包含@。因为您在开始时声明了表变量,所以这两条语句实际上都应该是INSERT而不是SELECT INTO


SELECT INTO尝试创建新表。在您的代码中,您基本上声明了一个从未使用过的表变量,然后您的第一个SELECT INTO创建了一个名为tempnewilling的永久表,然后您的第二个SELECT INTO尝试创建一个具有相同确切名称的表-因此出现了错误。

SELECT。。。创建一个新表

您将要反转它:

INSERT INTO @TEMPNEWBILLING 
(Columns...)
SELECT (your select query here)

从技术上讲,您需要声明该表,因为您使用的是@符号,所以它是一个表变量。然后使用插入到。。。选择对于所有插入。

在代码中,您没有使用定义的变量表,而是尝试将结果放入同一个物理表中。请尝试以下方法:

INSERT INTO @TEMPNEWBILLING(Account, Client, Timestamp, Billing, CallKind, HiTk1, HiTk2, HiDisc, HiTalk, HiPtch,     HiConf, HiHold, Ptch)
SELECT Account, Client, Timestamp, Billing, CallKind, HiTk1, HiTk2, HiDisc, HiTalk, HiPtch,     HiConf, HiHold, Ptch
 FROM   
        mCallEnd
 WHERE  billing = cast(@BILLINGNUMBER as decimal)
    AND Timestamp > @STARTITIME
    AND Timestamp < @ENDITIME
    AND CallKind  in (0,1,2,3,4,16)

INSERT INTO @TEMPNEWBILLING(Billing, SuperTime)
SELECT 
     Billing, SuperTime
FROM
        mClientMaint
 WHERE  billing = cast(@BILLINGNUMBER as decimal)
    AND Timestamp > @STARTITIME
    AND Timestamp < @ENDITIME
INSERT INTO @TEMPNEWBILLING(Account, Client, Timestamp, Billing, CallKind, HiTk1, HiTk2, HiDisc, HiTalk, HiPtch,     HiConf, HiHold, Ptch)
SELECT Account, Client, Timestamp, Billing, CallKind, HiTk1, HiTk2, HiDisc, HiTalk, HiPtch,     HiConf, HiHold, Ptch
 FROM   
        mCallEnd
 WHERE  billing = cast(@BILLINGNUMBER as decimal)
    AND Timestamp > @STARTITIME
    AND Timestamp < @ENDITIME
    AND CallKind  in (0,1,2,3,4,16)

INSERT INTO @TEMPNEWBILLING(Billing, SuperTime)
SELECT 
     Billing, SuperTime
FROM
        mClientMaint
 WHERE  billing = cast(@BILLINGNUMBER as decimal)
    AND Timestamp > @STARTITIME
    AND Timestamp < @ENDITIME