少し前の私の最後の質問に対する非常に親切な回答に続いて、レコードを転送したばかりのテーブルを、転送したばかりのレコードの履歴データ テーブルにクリーンアップしたいと思います。
DELETE FROM は明らかにしたくないすべてのレコードを削除することを知っているので、where ステートメントで条件を付ける必要があります。
私がこれまでに持っているものは次のとおりです。
CREATE PROCEDURE [HistoricalData].[ClearAllLandingInformation]
-- Add the parameters for the stored procedure here
@cutoffdate date
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
DELETE FROM Landings.LandingDetails
WHERE INNER JOIN Landings.LandingHeaders
ON Landings.LandingHeaders.LandingId = Landings.LandingDetails.LandingId
WHERE Landings.LandingHeaders.LandingDate1 <= @cutoffdate
DELETE FROM Landings.LandingHeaders
WHERE LandingDate1 <= @cutoffdate
GO
SQL を実行してプロシージャを作成しようとすると、INNER という単語の近くで構文が間違っているというエラー メッセージが表示されます (括弧の有無にかかわらず)。それは単に私の側の構文の構成が不十分な場合ですか、それともマスター テーブルの条件に基づいて詳細テーブルからレコードを削除できませんか?
最後に、悪いのは私のSQL構文であるという現在の仮定に取り組んでいます。最初に現在のテーブルから履歴テーブルにレコードを転送し、次に転送されたそれらのレコードを削除する手順を作成することに根本的に問題があります現在のテーブルから。最終的な目標は、エンティティ モデルにインポートして、エンド ユーザーが単一の関数として実行できるストアド プロシージャを作成することです。
ありがとう
これは、特定の基準を満たすレコードを移動してから削除するための結合された spoc での私の試みです。元のテーブル (最後の部分) からの削除には成功しますが、元の部分への転送には成功しません。
ALTER PROCEDURE [HistoricalData].[MoveAndClearLandingInformation] -- Add the parameters for the stored procedure here
@cutoffdate date
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
--First collect and move the required information
INSERT INTO HistoricalData.HistoricalLandingHeaders
SELECT
LandingId,
VesselId,
TicketNumber,
LandingDate1,
PortOfLanding,
CountryOfLanding,
Logbook1,
Loogbook2,
Logbook3,
LandingDecNumber1,
LandingDecNumber2,
LandingDecNumber3,
DateOfPurchase,
Posted,
AllocatedErsId,
LandingDate2,
LandingDate3,
VesselName,
VesselOwner,
VesselPLN,
ModifiedDate
FROM Landings.LandingHeaders
WHERE Landings.LandingHeaders.LandingDate1 <= @cutoffdate
INSERT INTO HistoricalData.HistoricalLandingDetails
SELECT
LandingDetails.LandingId,
ProductId,
PresentationCode,
PresentationState,
FreshnessGrade,
ProductSize,
FishingArea,
IcesZone,
Quantity,
UnitPrice,
LandingDetailVatRate,
SpeciesCode,
Currency,
ProductLandedUnderQuota,
LandingDetails.ModifiedDate
FROM Landings.LandingDetails
INNER JOIN Landings.LandingHeaders
ON Landings.LandingHeaders.LandingId = Landings.LandingDetails.LandingId
WHERE Landings.LandingHeaders.LandingDate1 <= @cutoffdate
-- Now remove that information from the current tables
DELETE FROM ld
FROM Landings.LandingDetails ld
JOIN Landings.LandingHeaders lh
ON ld.LandingId = lh.LandingId
WHERE lh.LandingDate1 <= @cutoffdate
DELETE FROM Landings.LandingHeaders
WHERE LandingDate1 <= @cutoffdate
END