nag*_*eeb 6 sql t-sql sql-server-2005
我正在尝试通过将多个查询组合到单个结果集中来为Crystal Reports编写存储过程(Crystal在一个报表中不支持多个结果).
我试图得到的结果集合并了两个表中的列.
在SP中,我声明了@temptable和列(因为我正在查询的两个表有不同的列).
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
)
Run Code Online (Sandbox Code Playgroud)
然后我SELECT
从两个表中INTO
的临时表:
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
Run Code Online (Sandbox Code Playgroud)
最后,我只是从临时表中获取所有数据.
SELECT * FROM @TEMPNEWBILLING
Run Code Online (Sandbox Code Playgroud)
不幸的是,出现问题,因为当我运行SP时,我得到一个错误
数据库中已经有一个名为"TEMPNEWBILLING"的对象.
我已经检查过它,似乎第一个查询正在运行,但错误会在第二个Select Into中抛出.我必须做错了,因为如果我使用#tables或@ tables(即delcare表和创建表),我会得到同样的错误.
用两个查询的结果填充临时表的前景是不可能的?我使用错误的工具来完成工作吗?
Lam*_*mak 11
在您的代码中,您没有使用您定义的变量表,而是尝试将结果放入同一物理表中.试试这个:
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
Run Code Online (Sandbox Code Playgroud)
Joe*_*ham 10
SELECT ... INTO创建一个新表.
你想要扭转它:
INSERT INTO @TEMPNEWBILLING
(Columns...)
SELECT (your select query here)
Run Code Online (Sandbox Code Playgroud)
您将要声明该表(从技术上讲,它是一个表变量,因为您正在使用@符号).然后对所有插入使用INSERT INTO ... SELECT ....