使用选择查询插入表中. [英] insert into table with select query.

查看:81
本文介绍了使用选择查询插入表中.的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我有一个名为orders的表.在订单表中插入订单号和日期时,将使用功能createOrderNumber()创建订单号,该功能将提供订单表中的下一个订单号(即max(order num + 1)).
但是,当两个用户同时插入时,将插入选择相同的订单号,因为select语句首先执行,并且订单号不是唯一的.有什么解决办法吗?
这是我的查询:

Hi,

I have a table named orders.While inserting to the orders table the order number and date will be inserted .Order number will be created using function createOrderNumber() which will give the next order number from order table(ie. max(order num + 1)).
But while two users inserting same time the select same order number is inserting because select statement executes first and order number is not unique. Any solution for that?
this is my query:

insert into orders (order_number,order_datetime) select dbo.createOrderNumber(@order_category_str),@order_datetime)

推荐答案

参考:
实现乐观并发 [在.NET中进行锁定的6种方法(悲观和乐观) [在.NET中处理并发问题 [ ^ ]
Refer:
Implementing Optimistic Concurrency[^]

Another good article on CP:
6 ways of doing locking in .NET (Pessimistic and optimistic)[^]

Here is one with some snaps:
Handling Concurrency Issues in .NET[^]




试试这个
Hi,

try this
INSERT INTO Orders (order_number,order_datetime)
values (exec ('select (isnull(max(order_number),0)+1) from Orders ),@order_datetime)



祝你好运



Best Luck


这篇关于使用选择查询插入表中.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆