【发布时间】:2016-01-14 11:22:27
【问题描述】:
我有一个这样的 SQL Server 查询:
CREATE TABLE ##Temp(
OrderID NVARCHAR(100),
ID INT,
Prices INT,
Total INT
);
INSERT INTO ##Temp (ID, Prices, OrderID, Total)
SELECT fc.ID, f.Prices, f.OrderID,
(SUM(f.Prices) OVER()) AS Total
FROM FruitCrates fc
LEFT JOIN Fruits f ON fc.ID = f.FruitCrateID
WHERE fc.OrderID LIKE '18_1635'
AND fc.Rights = 1
AND fc.Cancelled = 0
AND f.OrderID IS NOT NULL;
SELECT * FROM ##Temp;
但我不断收到错误消息:
消息 207,第 16 级,状态 1,第 12 行
列名“总计”无效。
我认为这是因为我没有正确使用OVER()但是我不知道如何解决它。
请注意
SELECT 语句在INSERT 之后没有放入时会继续运行。
没有 INSERT 的结果
╔═════╦════════╦══════════╦═══════╗
║ ID ║ Prices ║ OrderID ║ Total ║
╠═════╬════════╬══════════╬═══════╣
║ 77 ║ 1 ║ 1_370 ║ 104 ║
║ 19 ║ 101 ║ 1811_171 ║ 104 ║
║ 77 ║ 2 ║ 1811_171 ║ 104 ║
╚═════╩════════╩══════════╩═══════╝
【问题讨论】:
-
全局临时表。我敢打赌它有不同的架构。请在插入之前发布
SELECT * FROM ##temp的结果 -
你不明白这一点。我猜你有名字 colsion(存储过程调用另一个存储过程)并且你对临时表使用相同的名称。如果不发布更多代码,您的案例将无法复制,应该关闭。答案是不要到处使用相同的名称。
-
我同意@lad2025 - 尝试在顶部执行
DROP TABLE ##Temp(尽管您可能会删除您想要的内容...)或用另一个名称替换##Temp(#Temp1可能会这样做)。如果其中任何一个有效,那就是你的问题。 -
@PleaseTeach 所以我是对的。
-
我不明白为什么
CREATE TABLE语句没有抛出错误?
标签: sql sql-server tsql global-temp-tables