あなたのDELETE
ステートメントは参照していませんaDeleteVariable
。id
列は、のコンテキストでのみ存在しますaDeleteVariable
。
aDeleteVariable
あなたはあなたのDELETE
声明に参加する必要があります。また、共通テーブル式は再利用できないため、複製する必要があります。
このSQLフィドル(簡略化されたスキーマ/テーブル名付き)を参照してください。ただし、以下が必要です。
WITH aDeleteVariable AS (SELECT TOP 1 FooID as id
FROM [BSystem].[Foo].[bar] order by CreateTimeUTC desc)
DELETE FB
FROM [BSystem].[Foo].[fooBar] AS FB
INNER JOIN aDeleteVariable AS DV ON (FB.FooID = DV.id);
WITH aDeleteVariable AS (SELECT TOP 1 FooID as id
FROM [BSystem].[Foo].[bar] order by CreateTimeUTC desc)
DELETE B
FROM [BSystem].[Foo].[bar] AS B
INNER JOIN aDeleteVariable AS DV ON (B.FooID = DV.id);
もちろん、に参加すると、エイリアスaDeleteVariable
は必要ありません。id
以下が機能します。
WITH aDeleteVariable AS (SELECT TOP 1 FooID
FROM [BSystem].[Foo].[bar] order by CreateTimeUTC desc)
DELETE FB
FROM [BSystem].[Foo].[fooBar] AS FB
INNER JOIN aDeleteVariable AS DV ON (FB.FooID = DV.FooID);
WITH aDeleteVariable AS (SELECT TOP 1 FooID
FROM [BSystem].[Foo].[bar] order by CreateTimeUTC desc)
DELETE B
FROM [BSystem].[Foo].[bar] AS B
INNER JOIN aDeleteVariable AS DV ON (B.FooID = DV.FooID);
2つの別個の共通テーブル式がある場合、競合状態があり、2番目の式は異なる(またはこれをレコードFooID
に適合させると複数)を返す可能性があります。N
一般的なテーブル式を使用する代わりに、IDをテーブル変数に選択することをお勧めします。以下が機能するはずです。
DECLARE @DeleteVariable TABLE (FooID INT);
INSERT INTO @DeleteVariable (FooID)
SELECT TOP 1 FooID FROM [BSystem].[Foo].[bar]
ORDER BY CreateTimeUTC DESC;
DELETE FB
FROM [BSystem].[Foo].[fooBar] AS FB
INNER JOIN @DeleteVariable AS DV ON (FB.FooID = DV.FooID);
DELETE B
FROM [BSystem].[Foo].[bar] AS B
INNER JOIN @DeleteVariable AS DV ON (B.FooID = DV.FooID);