执行函数时,声明的变量值让它固定??
生成订单号的一个函数,
declare @order_no_new nvarchar(50)
set @order_no_new=(select dbo.Gen_Order_No())
在后面的语句中要重复用到@order_no_new,要怎样才能使得@order_no_new的值固定呢?
不知道大家明白我意思没。。。
[最优解释]
那就向tbl_order_detail表Insert的时候不要重新去取Gen_Order_No(),而是从主表tbl_order里获取201211060016单号就好了呀。
declare @order_no_new nvarchar(50)
set @order_no_new=(select dbo.Gen_Order_No())
假如@order_no_new = '201211060016'
Insert Into tbl_order(单号, 总额)
Values(@order_no_new, 1141.93)
Insert Into tbl_order_detail(单号, 小计)
Select @order_no_new, 259.00
Union
Select @order_no_new, 441.50
Union
Select @order_no_new, 50.00
还有一种方式,就是如果你的表设计的真的这么简单的话,完全可以先写子表,然后主表中将子表Group By一下回写回去就好了。
[其他解释]
额~~~你可以尝试再定义一个变量,这样就能保存
[其他解释]
不大明白楼主的意思!
要看你Gen_Order_No()中如何实现了,如果每执行一次都加一,那肯定每次都会变;如果每次执行时是从最大订单号加一,那数据没有保存时,随便执行几次都不会变。
楼主的写法:
declare @order_no_new nvarchar(50)
set @order_no_new=(select dbo.Gen_Order_No())
改为
declare @order_no_new nvarchar(50), @Order_No_New0 nvarchar(50)
Set @Order_No_New0 = =(select dbo.Gen_Order_No())
set @order_no_new = @order_no_new0
其实是一样的
[其他解释]
ALTER PROCEDURE [dbo].[AfterShoufei]
@xq_id nvarchar(50),
@xq_build nvarchar(50),
@roomno nvarchar(50),
@cst_code nvarchar(50),
@fee_code nvarchar(50),
@fee_name nvarchar(50),
@fee_singlemoney decimal(18,2),
@fee_totalmoney decimal(18,2),
@fee_remark nvarchar(50),
@month_qty int,
@month_section nvarchar(50),
@total_money decimal(18,2)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
declare @shoufeitime datetime
set @shoufeitime=(Select CONVERT(varchar(100), GETDATE(), 20))
declare @order_no nvarchar(50)
declare @order_no_new nvarchar(50)
set @order_no_new=(select dbo.Gen_Order_No())
set @order_no=@order_no_new
if exists (select order_no from tbl_order where order_no=@order_no)
goto InsertDetail
insert tbl_order(order_no, total_money, shoufeidate)
values(@order_no,@total_money,@shoufeitime)
InsertDetail:
insert tbl_order_detail
(order_no,xq_id,xq_build,roomno,cst_code,fee_code,fee_name ,month_qty,month_section,fee_singlemoney,fee_totalmoney,fee_remark,shoufeidate)
values(@order_no,@xq_id,@xq_build,@roomno,@cst_code,@fee_code,@fee_name,@month_qty,@month_section,@fee_singlemoney,@fee_totalmoney,@fee_remark,@shoufeitime)
END
goto InsertDetail
ALTER PROCEDURE [dbo].[AfterShoufei]
@singlemoney decimal(18,2),
@totalmoney decimal(18,2)
AS
BEGIN
SET NOCOUNT ON;
declare @order_no_new nvarchar(50)
set @order_no_new =(select dbo.Gen_Order_No())
if exists (select order_no from tbl_order where order_no=@order_no_new)
goto InsertDetail
insert tbl_order(order_no, totalmoney)
values(@order_no_new,@totalmoney)
InsertDetail:
insert tbl_order_detail
(order_no,singlemoney)
values(@order_no_new,@singlemoney)
END
正解!
@Lyongt
谢谢!赶在下班前解决!哈哈。分送你了。
[其他解释]
感觉你写的代码就是确定的啊,除非你这个在循环里。