【发布时间】:2016-05-02 21:12:19
【问题描述】:
我有三个使用相同结构的表(FuelRates_Petrol、FuelRates_LPG 和 FuelRates_Diesel):
| OrganisationID | Band1 | Band2 | Band3 | ModifiedDate |
|----------------|-------|-------|-------|---------------------|
| 1 | 10 | 12 | 19 | 01/05/2016 19:23:21 |
| 2 | 11 | 12 | 20 | 02/05/2016 19:23:21 |
我需要创建一个存储过程,它将从每个表中选择具有匹配OrganisationID 的记录。每张表都会有一条匹配的记录。
然后我需要将结果组合成一个具有以下结构的临时表并返回:
| OrganisationID | Petrol_Band1 | Petrol_Band2 | Petrol_Band3 | LPG_Band1 | LPG_Band2 | LPG_Band3 | Diesel_Band1 | Diesel_Band2 | Diesel_Band3 | ModifiedDate |
|----------------|--------------|--------------|--------------|-----------|-----------|-----------|--------------|--------------|--------------|---------------------|
| 1 | 10 | 12 | 19 | 10 | 12 | 19 | 10 | 12 | 19 | 01/05/2016 19:23:21 |
FuelRates_Petrol 表中的Band1 列应插入到FuelRates 临时表的Petrol_Band1 列中。其余列应遵循此约定以创建如上所示的单行。
SQL 不是我真正的包,但这是我的努力:
ALTER PROCEDURE [dbo].[FuelRates_RetrieveList]
@OrganisationID int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
CREATE TABLE #FuelRates(
OrganisationID int,
Petrol_Band1 int,
Petrol_Band2 int,
Petrol_Band3 int,
LPG_Band1 int,
LPG_Band2 int,
LPG_Band3 int,
Diesel_Band1 int,
Diesel_Band2 int,
Diesel_Band3 int,
ModifiedDate DateTime)
SELECT Band1 As Petrol_Band1, Band2 As Petrol_Band2, Band3 As Petrol_Band3, ModifiedDate, OrganisationID FROM [FuelRates_Petrol]
WHERE OrganisationID = @OrganisationID
INSERT INTO #FuelRates
SELECT Band1 As LPG_Band1, Band2 As LPG_Band2, Band3 As LPG_Band3 FROM [FuelRates_LPG]
WHERE OrganisationID = @OrganisationID
INSERT INTO #FuelRates
SELECT Band1 As Diesel_Band1, Band2 As Diesel_Band2, Band3 As Diesel_Band3 FROM [FuelRates_Diesel]
WHERE OrganisationID = @OrganisationID
INSERT INTO #FuelRates
SELECT * FROM #FuelRates
DROP TABLE #FuelRates
END
执行此操作时出现以下错误:
消息 213,级别 16,状态 1,过程 FuelRates_RetrieveList,第 33 行 插入错误:列名或提供的值的数量不匹配 表定义。
第 33 行是临时表创建块中的Diesel_Band1 int,。
我使用的是 SQL Server 2005。
是什么导致了这个错误,我是否以正确的方式解决这个问题?
【问题讨论】:
标签: sql sql-server stored-procedures temp-tables