我觉得这是一个许多人用户表和活动表之间的多对多关系。
因此,您可以使用触发器在更新时执行查询。 每次在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