我正在開發一個應用程序,我需要將電子郵件發送給表中的所有用戶。由於用戶數量以百萬計,所以一次選擇所有用戶將無濟於事。有什麼辦法可以用20或30個用戶組發送電子郵件,以便下一次能夠動態選擇下20個用戶併發送電子郵件。任何幫助將不勝感激。如何從sql數據庫中的表中取出下一條記錄
回答
創建一個新表EmailReceivers您填寫所有您希望發送到的電子郵件地址。 然後從該表中選擇前30位,一旦完成發送電子郵件,就從該表中刪除該記錄。當表格爲空時,你就完成了。
create table EmailReceivers
(
Id bigint identity(1, 1) primary key clustered,
EmailAddress varchar(5000)
)
-- Now fill this table with all the email addresses
insert EmailReceivers(EmailAddress)
select Email from users....
-- Select top 30 to send
select top 30 Id, EmailAddress from EmailReceivers order by Id
-- When done sending, delete the receiver from the table
delete EmailReceivers where id = @id
這樣做很多刪除可能是一個表現豬的位,所以你可能想刪除塊。通過刪除先前選擇的所有行來執行此操作。只需從該批次中獲取最高ID,並刪除ID低於或等於該ID的所有行。
delete EmailReceivers where id <= @maxIdFromLastBatch
如果您使用的是SQL Server 2005或更高版本,則可以使用Row_Number()來獲取所需的用戶數。
例子:
Select * from (Select *, Row_number()over (order by UserEmail) as Row from Userprofile) T
Where T.Row Between 30 and 40
如何過,如果你正在使用SQL Server 2000有沒有像ROW_NUMBER()。 您將不得不使用IDENTITY()函數和臨時表。
例子:
SELECT IDENTITY(int, 1,1) AS RowNumber, UserEmail INTO #temp
FROM Userprofile ORDER BY UserEmail ASC
SELECT * FROM #Temp Where #Temp.RowNumber Between 10 and 20 ORDER BY RowNumber DROP TABLE #Temp
確保刪除臨時表。
如果有人在發送電子郵件的同時向UserProfile表中添加更多行,則很可能有人會收到2封電子郵件。 –
@ Peter Henell -i已將UserName更改爲UserEmail。由於這是userprofile表,它不可能有2個用戶具有相同的電子郵件地址。所以,我不認爲有人會因爲擁有相同的電子郵件地址而收到2封電子郵件。但還有另一個問題。在發送電子郵件的過程中,可能會創建新用戶,並且由於我們在查詢中使用了訂單號,因此某些用戶可能會收到多封電子郵件,而有些用戶可能無法收到。爲了解決這個問題,我們可以在數據庫中使用標記來標記哪些郵件成功發送,並且在發送所有電子郵件之後,爲所有用戶設置標記爲false。 –
- 1. 從數據庫中取出一條記錄到選擇列表
- 2. sql從SQL Server數據庫表中取出記錄部分
- 3. 如何獲取SQL表中的下一條記錄
- 4. 如何顯示數據庫中的下一條記錄
- 5. 如何選擇數據庫中的下一條記錄?
- 6. 如何從Angular 2中的Firebase數據庫中獲取一條記錄
- 7. 如何從mysql數據庫中獲取一條記錄中的每個元素
- 8. 更新列表中的SQL數據庫中的每條記錄
- 9. 從數據庫中查看下一條記錄
- 10. 從mysql數據庫的所有表中刪除一條記錄
- 11. 從數據庫中獲取下一個和前一個記錄
- 12. 如何從MySQL數據庫中選擇一條隨機記錄?
- 13. 從表中的第15條記錄獲取數據直到最後一條從表中獲取數據
- 14. 如何使用PHP獲取MySQL數據庫表中的最後一條記錄?
- 15. MVC 4 SQL Server,如何獲取表中的第一條記錄?
- 16. 如何獲取sql表中的最後一條記錄
- 17. SQL Server:我如何從歷史記錄表中獲取數據?
- 18. 如何從SQL數據庫表中獲取最後5分鐘的記錄?
- 19. 如何將記錄/數據從一個數據庫表導出到另一個數據庫表中?
- 20. 如何統計SQL Server 2005數據庫中每個表中的每條記錄?
- 21. 如何使用SQL在postgresql中記錄最後一條記錄中的數據
- 22. 如何使用linq獲取表中的下一條記錄?
- 23. 從數據庫返回一條記錄
- 24. 如何使用SQL查詢從表中獲取每條記錄中的一條記錄?
- 25. 記錄沒有從SQL查詢中的數據庫中提取
- 26. 如何從sql server 2008中獲取表中的唯一記錄
- 27. 從行中的表中獲取數據庫中的記錄
- 28. 如何從數據庫中獲取唯一記錄?
- 29. 使用C#從SQL Server數據庫獲取多條記錄
- 30. SQL Query基於表中的2條記錄從1個表中獲取記錄
「下一步」按什麼順序?如果你想定義「下一個」和「前一個」,你必須**有一個明確的排序('ORDER BY(somecolumn)')定義 –
我希望你沒有創建一個垃圾郵件製造程序。 ;)用戶表中的條目是否有任何順序? ID,CreatedAtDate什麼的? – Corak
表中有未被排序的客戶ID。任何幫助如何實現這一點。謝謝 –