私は SQL Server の初心者で、投稿の融合からストアド プロシージャを作成しました。
ストアド プロシージャは次のとおりです。最初のエントリからの日数を使用し、その後変更しないという事実を除けば、すべて正常に機能するため、各電子メールで同じ @numberofdays を取得します。
ALTER PROCEDURE [dbo].[RenewalsCheck]
AS
DECLARE @CompanyName nvarchar (50) = NULL
DECLARE @ProductKey nvarchar (50) = NULL
DECLARE @ProductName nvarchar (50) = NULL
DECLARE @MaintenanceStartDate nvarchar (10) = NULL
DECLARE @MaintenanceEndDate nvarchar (10) = NULL
DECLARE @Result nvarchar (10) = NULL
DECLARE @Emailed int = NULL
DECLARE @Sent nvarchar (10) = NULL
DECLARE @Body nvarchar (max) = NULL
DECLARE @Subject nvarchar (max) = NULL
DECLARE @SalesManEmail nvarchar (max) = NULL
DECLARE @NumberOfDays nvarchar (5) = NULL
DECLARE @FollowUp int = NULL
DECLARE cEMail CURSOR LOCAL FAST_FORWARD FOR
Select
[CompanyName],
[Product Key],
[Product Name],
[Maintenance Start Date],
[Maintenance End Date],
[Emailed],
[SalesManEmail],
[FollowUp EC Emailed]
FROM dbo.Product
WHERE
datediff(d,GETDATE(),[Maintenance End Date]) < 15 AND [FollowUp EC Emailed] = '0'
SELECT
@NumberOfDays = datediff(d,GETDATE(),[Maintenance End Date])
FROM dbo.Product
WHERE datediff(d,GETDATE(),[Maintenance End Date]) < 15 AND [FollowUp EC Emailed] = '0'
OPEN cEmail;
WHILE 1 = 1
BEGIN
FETCH NEXT FROM cEmail INTO @CompanyName, @ProductKey, @ProductName, @MaintenanceStartDate ,@MaintenanceEndDate,
@Emailed, @SalesManEmail;
IF @@FETCH_STATUS = -1 BREAK;
SET @Body = 'The Product ' + @ProductName + ' with a product key of ' + @ProductKey + ' Expires in ' + @NumberOfDays + ' days.'
SET @Subject = 'Product Expiring in ' + @NumberOfDays + ' at ' + @CompanyName
EXECUTE msdb.dbo.sp_send_dbmail @profile_name='Jason',
@subject = @Subject,
@recipients = @SalesManEmail,
@copy_recipients ='',
@body = @body;
END
UPDATE [Product]
SET [FollowUp EC Emailed] = '1'
WHERE datediff(d,GETDATE(),[Maintenance End Date]) < 15 AND [FollowUp EC Emailed] = '0'
CLOSE cEmail;
DEALLOCATE cEmail;
セットアップ方法に疑問を持っている方もいらっしゃると思いますが、これを行うためのより良い方法があるかもしれませんが、私は初心者で、1 つの小さなセクションから離れて作業しています。
どんな助けでも大歓迎です。
よろしく
ジェイソン