销售点的逻辑?

时间:2011-07-11 00:55:01

标签: c# sql identity point-of-sale

我的桌子......

create table sale
(
idsale int primary key identity,
idclient int,
user1 varchar(50),
fecha datetime
)

create table listofsale
(
idsale int,
idproduct int,
amount int,
priceunit float,
subtotal
)

销售完成后我将插入全部 我指的是我要插入

的信息
table sale

listofsale 然后我做插入,但我怎么得到列表相同的idsale? 我的另一个想法是我的idsale是varchar (10) 我在c#中随机输入字母和数字,我将会拥有它 在文本框中,所以我可以同时保存它

或者,我可以用另一种形式做什么? 这样做的最佳方式是什么?

- 补充道 { 我总是有一个“插入”销售按钮并获得身份证, 之后你可以添加列表.. 但我知道这不是正确的形式.. 有时您没有列表的销售(如果您没有添加任何产品,并关闭应用程序并再次打开它) }

4 个答案:

答案 0 :(得分:4)

您有几种选择。 (更多信息:http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

  1. 使用SCOPE_IDENTITY()返回在当前会话中创建的最后一个标识值,并且也限制为当前范围。这解决了@@ IDENTITY的问题。

  2. 让INSERT语句通过OUTPUT子句(http://msdn.microsoft.com/en-us/library/ms177564.aspx

  3. 为您提供插入的ID
  4. 不使用Int作为密钥,而是使用uniqueidentifier(GUID)。 好处:您可以创建ID客户端并将其提交给服务器。 下行:它将导致您的索引地狱。

  5. 如果由我决定并且我想100%确定我的ID值,那么我会使用上面的选项#。

答案 1 :(得分:1)

当你 INSERT INTO销售.... SQL @@ IDENTITY 变量将包含 idsale 的最后生成值。 您可以使用此值将所需的 idsale 插入 listofsale 表。

如果您需要更多信息,可以在http://msdn.microsoft.com/en-us/library/ms187342.aspx

找到

答案 2 :(得分:1)

我有点难以理解问题所在。在阅读中,在我看来,您不一定在生成销售ID方面存在问题,而是在跨会话/计算机/实例/等维护一个客户的销售清单时?

假设: 1)特定客户一次只能有一个销售清单,并且 2)您的列“idclient”是该销售清单所属的客户的ID。

解决方案: 而不是寻找销售,寻找有问题的客户在桌面销售中的idclient。如果没有任何回复,请为该客户创建一个新的销售,如果它确实回来了,请使用该saleid。每当你需要那个saleid时就这样做。

更好的解决方案: 以上解决方案仅允许您为每个客户进行一次销售,从而销售清单。如果您想要任意数量的过去已完成的销售,但只需要一个当前的,打开一个,请执行以下操作:

向表格销售添加“isSaleCompleted”布尔列。仅在销售完成并完成时将其设置为true。 然后,在与上面相同的客户销售搜索中,还检查isSaleCompleted是否为false。

因此,客户销售搜索存储过程看起来如此:

CREATE Procedure ClientSaleSearch
(
    @clientid int
)
SELECT saleid
From Sale
WHERE id=@userid AND isSaleCompleted = '0'

答案 3 :(得分:1)

我认为您不应该将主键(如idsale)作为varchar,因为它会降低搜索和检索数据的速度。尝试将idsale设为autonumber,并在sale表中插入数据后获取最后插入的标识值的id,并将其用于插入listofsale。

在处理我的销售点(TradeMeters)时,我设计了这样的表:

SaleItems
{
    transaction_id int,
    product_id int,
    quantity float,
    unit_price float,
    discount float
}

注意小计不是必需的,因为您可以从金额和priceunit计算小计。

Subtotal = priceunit x amount