私はそれを取得できませんか?私は構文の中で "Union All"を実行する場所は見当たりません。私は何が欠けていますか?エラー:再帰的な共通テーブル式 'EmailLog'にトップレベルのUNION ALL演算子が含まれていません
CREATE PROCEDURE SapUser_NdaysBeforeExpirationNotification
-- Add the parameters for the stored procedure here
(
@AuditTypeKey nvarchar(50),
@TimeLapseInMonths int
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
With AuditResults(SapUserId)
AS
(
Select SapUserId From Audit
Where TypeKey = @AuditTypeKey And DATEDIFF(month, AttemptDate, GETDATE()) < 2
)
Select * from SapUser
Inner Join Audit On vw_SapUser_Retrieve.SapId <> AuditResults.SapUserId
Where DATEDIFF(month, OriginalTrainingDate, GETDATE()) > @TimeLapseInMonths
END
監査表(別名EmailLog)
CREATE TABLE [dbo].[Audit](
[AuditId] [int] NOT NULL,
[TypeKey] [nvarchar](50) NOT NULL,
[Description] [nvarchar](250) NULL,
[AuditDate] [datetime] NOT NULL,
[SapUserId] [int] NOT NULL,
CONSTRAINT [PK_EmailLog] PRIMARY KEY CLUSTERED
SAPUSER表
CREATE TABLE [dbo].[SapUser](
[SapId] [int] IDENTITY(70000,1) NOT NULL,
[Username] [nvarchar](10) NULL,
[Password] [nvarchar](50) NOT NULL,
[FirstLogin] [bit] NOT NULL,
[Roles] [tinyint] NOT NULL,
[Status] [nvarchar](20) NOT NULL,
[Title] [nvarchar](20) NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
...など
問題の詳細
SapUserとEmailLogの2つのテーブルがあります。特定の時間枠内で、ユーザーが行動を起こさなかった場合、アカウントは削除されます。だから、90,60,30,7,1日増分で私は彼らに行動を促す電子メールを送っています。
私は電子メールを送信するたびに、「監査」テーブル(emaillogだった)に記録します。すべての月が30日であるわけではないので、1人が90日間の2回の通知を受けることが可能かもしれません。これを防ぐために、監査テーブルに行を挿入しています。
電子メールのアカウントを見つけるためにルーチンを実行すると、最初にN(90,60,30など)日以内に電子メールを送信し、考慮から除外する監査テーブルのすべてのアカウントを見つけています。
EmailLogはどこに入りますか?このエラーは、EmailLogという名前のCTEが必要であると思われるようです。しかし、CTE AuditResultsを使用するようにも思われません...同義語を使用していますか? – gbn
悪いですが、私はEmailLogをAuditに改名しました。上記のコードで古いテーブル名への参照をすべて削除しました。 –