在我剛纔提到的最後一個問題非常客氣的回答之後,我現在想清理剛纔我將記錄轉移到這些記錄的歷史數據表中的表格,只是轉移。刪除Master-Details表中的記錄
我知道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
'WHERE INNER JOIN'顯然是錯的。應該是'DELETE Landings.LandingDetails FROM Landings.LandingDetails INNER JOIN' –