日期:2014-05-17  浏览次数:20534 次

执行函数时,声明的变量值让它固定??
生成订单号的一个函数,

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
其实是一样的
------其他解决方案--------------------
引用:
不大明白楼主的意思!
要看你Gen_Order_No()中如何实现了,如果每执行一次都加一,那肯定每次都会变;如果每次执行时是从最大订单号加一,那数据没有保存时,随便执行几次都不会变。
楼主的写法:
declare @order_no_new nvarchar(50)
set @order_no_new=(select dbo.Gen_Order_No())
改……

是每执行一次都+1,形式如:201211060016,后4位为流水号。


有2张表,tbl_order 和 tbl_order_detail,
两张表里都有order_no这一列,
我插入表时,生成一个订单号order_no,先插入tbl_order,且只插入1条记录,再插入tbl_order_detail,会有多条记录,但是order_no必须是相同的

tbl_order
单号              总额
201211060016 1141.93

tbl_order_detail
单号              小计
201211060016 259.00
201211060016 441.50
201211060016 50.00

我是先判断tbl_order里有没有201211060016这个,如果有,就插入tbl_order_detail。。


------其他解决方案--------------------
所以我想把order_no生成以后变成一个固定的值,再去做判断。但是每次都是新的值、存储过程如下:
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