跪求SQL牛人拯救。熬了一夜了,没找到原因

zhangliang6702 2014-09-20 05:44:47
USE [xlmis]
GO
/****** Object: StoredProcedure [dbo].[Pb_SendBillToInvoice] Script Date: 09/20/2014 05:06:26 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[Pb_SendBillToInvoice] @BillClient int,@IDString nvarchar(1000)='',@UserID int,@UserName nvarchar(50)
as
declare @sql nvarchar(max)='',@invoiceid int
--处理数据源
select item_id itemid,* into #Temp from Tb_BillItem where 1=0
alter table #Temp drop column item_id
select @sql= N'insert into #Temp select * from xlmis.dbo.Tb_BillItem where item_id in ('+@IDString+')'
exec sp_executesql @sql
alter table #Temp add invoice_id int

--插入主表
insert into XLData.dbo.htxx_invoice_input(client_id,customer_name,invoice_flag,extract_flag,freight_charge,batch_code,creator_id,creator_name)
select @BillClient,customer_name,(case when (select invoice_money from #Temp)>0 then 0 else 4 end),(select top 1 machine_number from #Temp),isnull((select SUM(freight_cost) from #Temp),0),(select top 1 batch_code from #Temp),@UserID,@UserName from Tb_ClientInfo where client_id=@BillClient
select @invoiceid=IDENT_CURRENT('XLData.dbo.htxx_invoice_input')
--更新从表数据源
update #Temp set invoice_id=@invoiceid

--插入从表
insert into XLData.dbo.htxx_invoice_input_item(item_id,invoice_id,[type_id],[type_name],item_name,item_price,tax_rate,tax_money,item_amount,item_money,free_amount,item_stand)
select itemid,invoice_id,[type_id],[type_name],product_type,invoice_price,tax_rate,tax_money,invoice_amount,invoice_money,free_amount,product_model from #Temp

select @sql= N'update Tb_BillItem set invoice_status=1 where item_id in ('+@IDString+')'
exec sp_executesql @sql

truncate table #Temp
drop table #Temp


搞不懂什么原因,之前还可以的。
...全文
277 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋的红果实 2014-09-20
  • 打赏
  • 举报
回复
内容太多了,没时间看,帮顶
Null_Reference 2014-09-20
  • 打赏
  • 举报
回复
返回的值不止一个。。可以用in嘛,或者把返回的结果改成只有一个返回结果。
threenewbee 2014-09-20
  • 打赏
  • 举报
回复
select max(invoice_money) from #Temp)>0
wangnaisheng 2014-09-20
  • 打赏
  • 举报
回复
应该是你插入主表那的问题 就是select invoice_money from #Temp 可能返回不是一个值,所以比较不了大小, 你可以先加一个top 1 试试,select top 1 invoice_money from #Temp
smthgdin_020 2014-09-20
  • 打赏
  • 举报
回复
你不能拿1个值和一堆值去比较。
内容概要:本文详细介绍了MySQL中InnoDB存储引擎的逻辑存储结构及其表分区技术。InnoDB的逻辑存储单元由高到低依次为表空间、段、区、页和行,其中表空间包括系统表空间、独立表空间、通用表空间、Undo表空间和临时表空间,每种表空间具有不同的用途和管理方式。文章进一步讲解了表分区的概念与类型,包括RANGE、LIST、HASH、KEY以及多字段COLUMNS分区,阐述了分区的优势如提升查询性能、便于数据维护、支持跨物理设备存储等,并列举了实际SQL操作示例,帮助理解分区表的创建、修改、删除及重组等操作。同时指出了分区的限制条件,如最大分区数量、主键约束要求等。; 适合人群:具备一定MySQL数据库基础,从事数据库开发、运维或架构设计的技术人员,尤其是工作中涉及大数据量表管理与性能优化的1-3年经验研发人员。; 使用场景及目标:①深入理解InnoDB存储机制,优化数据库物理结构设计;②掌握表分区技术,应用于海量数据存储与高效查询场景,如日志系统、订单系统的时间分区设计;③通过分区实现数据归档、快速删除历史数据、提升查询性能等运维目标; 阅读建议:学习时应结合MySQL实际环境动手实践文中提供的SQL命令,重点关注表空间管理和分区策略的选择,理解其对性能和维护的影响,并注意分区使用中的限制条件以避免设计失误。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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