我正在编写一些存储过程,以将数据从用于当年记录的表传输到用于存储历史数据的表。我目前正在研究的一个例子是典型的主从关系,其中明细记录显然需要在主记录之前处理。我写了一个简单的测试查询来收集一些样本记录,看看我是否正确编写了基本的 sql。
DECLARE @cuttoffdate date = '31/03/2009'
SELECT
*
FROM Landings.LandingDetails
INNER JOIN Landings.LandingHeaders
ON Landings.LandingHeaders.LandingId = Landings.LandingDetails.LandingId
WHERE Landings.LandingHeaders.LandingDate1 <= @cuttoffdate
SELECT
*
FROM Landings.LandingHeaders
WHERE Landings.LandingHeaders.LandingDate1 <= @cuttoffdate
这有效并产生了我期望的两组记录。但是,当我在存储过程中使用它时:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [HistoricalData].[TransferAllLandingInformation]
-- 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
INSERT INTO HistoricalData.HistoricalLandingDetails
SELECT
*
FROM Landings.LandingDetails
INNER JOIN Landings.LandingHeaders
ON Landings.LandingHeaders.LandingId = Landings.LandingDetails.LandingId
WHERE Landings.LandingHeaders.LandingDate1 <= @cutoffdate
INSERT INTO HistoricalData.HistoricalLandingHeaders
SELECT
*
FROM Landings.LandingHeaders
WHERE Landings.LandingHeaders.LandingDate1 <= @cutoffdate
END
GO
它无法执行给我以下错误:
消息 213,级别 16,状态 1,过程 TransferAllLandingInformation,第 12 行 列名或提供的值的数量与表定义不匹配。
第 12 行就在 BEGIN 语句之后。
谁能告诉我为什么会这样。我绝不会声称自己精通 sql,因此这个特殊的错误目前让我很难过,我想从中学习。
只是为了清楚起见,这是在 SSMS 2012 中编写的。
谢谢