@SqlStr='Select @Quantity=Sum(Quantity) From StoreSumAccount' 如何返回@Quantity(200分

  • 主题发起人 主题发起人 wujinshu
  • 开始时间 开始时间
W

wujinshu

Unregistered / Unconfirmed
GUEST, unregistred user!
@SqlStr='Select @Quantity=Sum(Quantity) From StoreSumAccount' 如何返回@Quantity(200分)<br />在Sql Server 存储过程中的有一字符串
@SqlStr='Select @Quantity=Sum(Quantity) From StoreSumAccount' 如何返回@Quantity
Excute(@SqlStr)
如何取得@Quantity
 
注意以下三点。
1.定义参数@Quantity
@Quantity as money ,output
2.调用的存储过程
SotredProc的参数设置为 ptInputOutput
3.调用存储过程时用ExecProc ,不用open
 
能否帮我举个例子,小弟先谢了
 
--存储过程代码如下
CREATE PROCEDURE TranferToPurchase
(
@OrderSeq as int ,
@ErrorType as int output --- 0 成功插入 1 供应商资料不齐全,2 指定编号的订单已经转换 3 未定义
)
AS
set @ErrorType=0
if Exists (Select 1 from Purchase where OrderNo=@OrderSeq)
begin
set @ErrorType=2
return
end
if Exists (select 1 from Orderdetail where OrderSeq=@OrderSeq and COALESCE(InCustomerNo,0)=0)
begin
set @ErrorType=1
return
end
Insert Purchase (OrderNo,MeNo,InCustomerNo,Amt,CategoryID,InDate,Type)
select A.OrderSeq,B.MeNo,A.InCustomerNo,sum(A.InAmt) Amt,257 categoryid,CONVERT(char(12), GETDATE(), 101) InDate,1 Type
from Orderdetail A,OrderMain B where A.orderseq=@OrderSeq and A.OrderSeq=B.OrderSeq group by A.orderseq,A.incustomerNo,B.MeNo
GO
 
//调用函数如下
function TFData.TransferToPurchase(OrderNo:integer):integer;
begin
with DataM.ADOCommand do //生成采购单,用通用的TADOCommand
Begin
CommandText:='TranferToPurchase;1';
Parameters.Clear;
Parameters.CreateParameter('@OrderSeq',ftInteger,pdInput,0,0);
Parameters.CreateParameter('@ErrorType',ftInteger,pdInputOutput,0,0);
Parameters.ParamByName('@OrderSeq').Value:=OrderNo;
Execute;
Result:=Parameters.ParamByName('@ErrorType').Value;
end;
end;
 
要求在一个存储过程中完成,不是在Delphi中实现
 
Create Procedure ProcedureName
AS
Declare
@SqlStr Varchar(1000),
@Quantity Varchar(1000)

Select @SqlStr='Select @Quantity=Sum(Quantity) From StoreSumAccount'
Execute (SqlStr)
在存储过程中如何取得@Quantity的值
 
你可以在一个存储过程中调用另一个存储过程,获得返回值,如调用上例存储过程获得
declare @OrderSeq int
declare @ErrorType
set @OrderSeq=100
exec TranferToPurchase @OrderSeq,@ErrorType
这样就得到@ErrorType返回值了
 
这种方案好象行不通,因为
@SqlStr='Select Sum(Quantity) From 表名1'
@SqlStr='Select Sum(Quantity) From 表名2'
@SqlStr='Select Sum(Quantity) From 表名3'
@SqlStr='Select Sum(Quantity) From 表名4'
......
@SqlStr='Select Sum(Quantity) From 表名n'

那要写好多个存储过程,表名n是从一个表中的字段的值取得
 
储存过程中用循环来处理,把计算结果放在一个表中,你的返回值个数是不确定的用参数返回不大
合适。
 
用循环是可以的,但是存在一个问题:
Execute(Select Sum(Quantity) From @TableName)
那Sql Server到底认为'@TableName'是一个表名,还是认为@TableName是一个变量呢,
好象我试了几次,Sql Server把@TableName认为是一个表名,而不是一个变量
 
请多多参与讨论
 
后退
顶部