我覺得這是一個許多人用戶表和活動表之間的多對多關係。
因此,您可以使用觸發器在更新時執行查詢。 每次在Activity表中更新一行時,觸發器都會執行一些操作。 它將通過添加新的禮物代碼來更新用戶表。
我想你可以在你的GiftCode表中添加一個屬性來輕鬆地檢查代碼是否已經被使用。你可以得到一個這樣的未使用的代碼:
// Retrieve an unused code based on a BIT attribute.
SELECT TOP 1 [Code] FROM [GiftCode] WHERE IS_UNUSED = 1;
不要忘記使用它後更新此禮品代碼。
您可以使用SELECT語句包括子SELECT語句得到一個代碼太:
// Retrieve an unused code based on User table used codes.
SELECT TOP 1 [Code] FROM [GiftCode] WHERE [Code] NOT IN (SELECT [Code] FROM [User]);
它運作良好,如果你沒有太多的用戶。否則,第一個陳述將會更有效率。 不要忘記更新用戶表。
現在,您可以在UPDATE語句中輕鬆使用前面的這些語句之一。 這將是類似的東西:
UPDATE [User] SET [Code] = (
SELECT TOP 1 [Code] FROM [GiftCode] WHERE [Code] NOT IN (
SELECT [Code] FROM [User]))
WHERE USER_ID = // ...;
您可以在觸發器執行此。
您可以使用stored procedure,它更高效,並將所有SQL代碼包裝在編譯函數中。然後你可以在你的觸發器中調用它。 您也可以在作業中執行存儲過程(請參閱SQL Server代理作業)。
確實sql腳本計數編程? – Steve 2014-12-03 21:58:03
如果可以在SQL服務器內完成,那很好。我只是在尋找一種不會導致我不得不用另一種語言編寫腳本的解決方案。 – edvan22 2014-12-03 22:25:14