这是什么问题啊 无语

leaf_2008 2009-04-29 02:10:55
我写了一个存储过程

建了一个虚拟表
CREATE TABLE #ProductsToPrepare
(
[ProductId] int NOT NULL,
[Quantity] int,
[orderid] int
)





SET @SQL = 'INSERT INTO #ProductsToPrepare (ProductId,Quantity,orderid) select ss.productid,Sum(ss.Quantity)from ( '
SET @SQL = @SQL + ' SELECT e.ExchangeId as productid,e.quantity*hh.quantity as quantity,hh.orderid FROM huanaigu.productexchange e '
SET @SQL = @SQL + ' left join (select productid,sum(quantity),orderid as quantity from huanaigu.orderproduct where orderid IN (SELECT OrderId FROM huanaigu.Orders WHERE OrderStatusId=2) group by productid ) hh on e.productid=hh.productid '
SET @SQL = @SQL + 'where e.productid in(select productid from huanaigu.orderproduct where orderid in(SELECT OrderId FROM huanaigu.Orders WHERE OrderStatusId=2) group by productid) ) ss group by ss.productid'

exec sp_executesql @SQL




可是调试的时候老是报错误、
错误如下

服务器: 消息 8157,级别 16,状态 1,行 1
[Microsoft][ODBC SQL Server Driver][SQL Server]包含 UNION 运算符的查询表达式中的所有查询都必须在选择列表中包含同样数目的表达式。
获取调用堆栈失败!




大家帮忙看看是什么问题啊
...全文
178 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
皓月明 2009-04-30
  • 打赏
  • 举报
回复
up
Adechen 2009-04-29
  • 打赏
  • 举报
回复
查询的结果中与定义的结构不相同,多了或少了
叶子 2009-04-29
  • 打赏
  • 举报
回复
把你的@SQL字符串select出来看一下,还是哪里字段没有匹配上。
你可以先把where条件去掉试一下
把@sql的语句拿出来,挨个子句测试,看看都好使不?
leaf_2008 2009-04-29
  • 打赏
  • 举报
回复
加了也不行还是一样的错误,我试过了
leaf_2008 2009-04-29
  • 打赏
  • 举报
回复
maco_wang

加了也不行还是一样的错误,我试过了
benbirdar 2009-04-29
  • 打赏
  • 举报
回复
两个表的字段个数不一致!
kuuga_8086 2009-04-29
  • 打赏
  • 举报
回复
所对的数据列名或多或小了一些~
dd__dd 2009-04-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 maco_wang 的回复:]
就你的第一个语句来看


INSERT INTO #ProductsToPrepare
(ProductId,Quantity,orderid)
select ss.productid,Sum(ss.Quantity) from




取出两个字段,往三个字段里插,前后不对应!
[/Quote]
shangxb 2009-04-29
  • 打赏
  • 举报
回复
SET @SQL = 'INSERT INTO #ProductsToPrepare (ProductId,Quantity,orderid) select ss.productid,Sum(ss.Quantity)from ( '
SET @SQL = @SQL + ' SELECT e.ExchangeId as productid,e.quantity*hh.quantity as quantity,hh.orderid FROM huanaigu.productexchange e '
SET @SQL = @SQL + ' left join (select productid,sum(quantity),orderid as quantity from huanaigu.orderproduct where orderid IN (SELECT OrderId FROM huanaigu.Orders WHERE OrderStatusId=2) group by productid ) hh on e.productid=hh.productid '
SET @SQL = @SQL + 'where e.productid in(select productid from huanaigu.orderproduct where orderid in(SELECT OrderId FROM huanaigu.Orders WHERE OrderStatusId=2) group by productid) ) ss group by ss.productid'

字段数不匹配
lacie 2009-04-29
  • 打赏
  • 举报
回复
SQL语句中字段不一样多,一定是少写了,你在详细查查
叶子 2009-04-29
  • 打赏
  • 举报
回复
就你的第一个语句来看

INSERT INTO #ProductsToPrepare
(ProductId,Quantity,orderid)
select ss.productid,Sum(ss.Quantity) from


取出两个字段,往三个字段里插,前后不对应!
ljhcy99 2009-04-29
  • 打赏
  • 举报
回复
你的sql改为


INSERT INTO #ProductsToPrepare (ProductId,Quantity,orderid)
select ss.productid,Sum(ss.Quantity)
from (
SELECT e.ExchangeId as productid,e.quantity*hh.quantity as quantity,hh.orderid
FROM huanaigu.productexchange e left join
(select productid,sum(quantity),orderid as quantity
from huanaigu.orderproduct
where orderid IN (SELECT OrderId FROM huanaigu.Orders WHERE OrderStatusId=2)
group by productid
) hh on e.productid=hh.productid

where e.productid in
(select productid from
huanaigu.orderproduct
where orderid in(SELECT OrderId FROM huanaigu.Orders WHERE OrderStatusId=2)
)
) ss
group by ss.productid

zhangmeeno 2009-04-29
  • 打赏
  • 举报
回复
LS正解
叶子 2009-04-29
  • 打赏
  • 举报
回复
意思是你union的字段不一样多

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧