テーブル内のすべてのユーザーにメールを送信する必要があるアプリケーションを開発しています。ユーザー数は数百万人に上るため、すべてのユーザーを一度に選択しても意味がありません。20 人または 30 人のユーザーのグループでメールを送信して、次回は次の 20 人のユーザーを動的に選択してメールを送信する方法はありますか? どんな助けでも大歓迎です。
2 に答える
1
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
必ず一時テーブルを削除してください。
于 2013-04-13T10:49:51.280 に答える
0
送信先のすべての電子メール アドレスを入力する新しいテーブル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
于 2013-04-13T08:09:17.153 に答える