2011-07-11 66 views
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, 後的做到這一點,你可以添加列表.. 一個按鈕,但我知道這是不正確的形式.. 有時你有沒有銷售清單(如果你不加未的產品,並關閉應用程序,然後再次打開它) }

回答

1

我有點難以理解問題是什麼。通讀一下,在我看來,你不一定有產生銷售ID的問題,而是在會話/計算機/實例/等中維護一個客戶的銷售清單?

假設: 1)特定的客戶端只能有一次一個銷售清單,並 2)你的列「idclient」是客戶端,而接受該銷售列表所屬的ID。

解決方案:與其 尋找出售,尋找idclient,表出售,有問題的客戶端。如果沒有任何結果,請爲該客戶創建一個新的銷售,如果銷售返回,則使用該銷售。無論何時您需要銷售,都要這樣做。

更好的解決方案: 上述方案只允許您曾經有一個銷售,因此銷售列表中,每個客戶端。如果你想要的任何數量的過去,完成銷售,但只有一個電流,開放的,這樣做:

添加「isSaleCompleted」布爾列於表銷售。只有在銷售完成並完成時纔將其設置爲真。 然後,在與上面相同的客戶銷售搜索中,還檢查isSaleCompleted是否爲false。

因此,客戶銷售搜索存儲過程看起來像這樣:

CREATE Procedure ClientSaleSearch 
(
    @clientid int 
) 
SELECT saleid 
From Sale 
WHERE [email protected] AND isSaleCompleted = '0' 
1

當你INSERT INTO銷售.... 的SQL @@ IDENTITY變量將包含最後生成的值id銷售。 您可以使用此值將期望的idsale添加到您的listofsale表中。

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

+0

我知道了!但是如果你在2臺計算機上同時運行,會發生什麼?我不想有這個問題.. @Sasha – angel

+0

如果你在2個不同的客戶端@@ IDENTITY插入將對每一個不同的值,因爲你將有1套用於每個客戶端。 @@ IDENTITY具有SQL會話範圍。意味着它不會在SQL會話之間共享。 – Sasha

+0

確定你有2個diferents值,但把它添加到我的表listofsale當我做(選擇出售MAX(idsale))會發生什麼的話,那是會得到最後的!和在電腦1,並在電腦2 ,將用lastsumber添加到帶有idsale的listofsale,這將會是一個問題! – angel

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語句給你插入的ID通過OUTPUT子句(http://msdn.microsoft.com/en-us/library/ms177564.aspx

  3. 而不是使用一個Int作爲您的鑰匙,使用唯一標識符(GUID)。 收益:您可以創建id客戶端並將其提交給服務器。 缺點:它會導致你的索引地獄。

如果這取決於我,我想要100%確定身份證號碼的價值,那麼我會使用上面的選項#2。

1

我不認爲你應該讓主鍵(如idsale)爲varchar,因爲它會減慢搜索和檢索數據。嘗試使idsale作爲自動編號,並在銷售表中插入數據後獲取最後插入的標識值的標識並將其用於插入listofsale。

我的銷售(TradeMeters)點工作時,我設計的表是這樣的:

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

注意大部不需要,因爲你可以從數量和priceunit計算小計。

Subtotal = priceunit x amount