1

我的桌子...

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# 中随机输入字母和数字,我将把它放在一个文本框中,所以我可以同时保存它,

或者,我还能用什么其他形式呢?最好的方法是什么?

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

4

4 回答 4

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 )为您提供插入的 ID

  3. 不要使用 Int 作为密钥,而是使用唯一标识符 (GUID)。 好处:您可以创建 id 客户端并将其提交给服务器。 缺点:它会给你的索引带来地狱。

如果这取决于我,并且我想 100% 确定我得到的 ID 值,那么我会使用上面的选项 #2。

于 2011-07-11T01:36:31.417 回答
1

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

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

于 2011-07-11T01:03:13.477 回答
1

我有点难以理解问题所在。通读一遍,在我看来,您在生成销售 ID 时不一定有问题,而是在跨会话/计算机/实例/等为客户维护一个销售列表时?

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

解决方案:与其寻找销售,不如寻找相关客户的 idclient,in table sale。如果结果一无所获,则为该客户创建一个新的销售,如果它确实返回销售,则使用该 saleid。每当您需要该 saleid 时执行此操作。

更好的解决方案:上述解决方案只允许您拥有一个销售,因此每个客户都有销售清单。如果您想要任何数量的过去完成的销售,但只有一个当前的,打开一个,请执行以下操作:

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

因此,客户销售搜索存储过程如下所示:

CREATE Procedure ClientSaleSearch
(
    @clientid int
)
SELECT saleid
From Sale
WHERE id=@userid AND isSaleCompleted = '0'
于 2011-07-11T02:48:14.113 回答
1

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

在我的销售点(TradeMeters)工作时,我设计了这样的表格:

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

注意小计不是必需的,因为您可以从数量和价格单位计算小计。

Subtotal = priceunit x amount
于 2011-12-10T22:10:19.063 回答