sql过程存储多个相同的记录

时间:2012-05-25 18:43:31

标签: sql tsql stored-procedures procedure

我的sql server数据库有这个存储过程......

ALTER PROCEDURE [dbo].[NewBudget]
@year int,
@int nvarchar(3)
AS
BEGIN
SET NOCOUNT ON;
INSERT [NAOLI].[dbo].[BudgetsEditTbl]
([F_Year],[O_OrgCode],[O_OrgDesc],[S_SubObject],[S_SubDescrip],[B_BudgetAmt],[B_Initials],[B_CIPrefNo],[B_OrgBudgetAmt],[keyfield]) 
SELECT @year as [F_Year],[O_OrgCode],[O_OrgDesc],[S_SubObject],[S_SubDescrip], 0.00 as [B_BudgetAmt],@int as [B_Initials],null as [B_CIPrefNo],null as [B_OrgBudgetAmt],NewID()
FROM [NAOLI].[dbo].[BudgetsEditTbl]
END

根据参数'@year'发生的事情会自动更新数据库,其中包含年度变化的新年记录。只使用新的年份,orgcode和相应的子对象来更新它,而不是使用相同的orgcode为我提供6条记录。所以它基本上运行了6次程序并将所有混乱存储在我的数据库中。知道如何解决这个问题吗?

2011 | 536003 | Engineering | 6302 | Roads and Components | 0.00 | MC | N/A | 0.00    
2011 | 536003 | Engineering | 6303 | Rights of Way -Acquire | 0.00 | MC | N/A | 0.00
2010 | 536003 | Engineering | 6302 | Roads and Components | 18300.00 | FG | N/A | 0.00    
2010 | 536003 | Engineering | 6303 | Rights of Way -Acquire | 18300.00 | FG | N/A | 0.00

因此,对于每一年,相同的代码和信息只有不同的数量......

1 个答案:

答案 0 :(得分:0)

您可以使用DISTINCT删除任何重复项

ALTER PROCEDURE [dbo].[NewBudget]
@year int,
@int nvarchar(3)
AS
BEGIN
SET NOCOUNT ON;
INSERT [NAOLI].[dbo].[BudgetsEditTbl]
([F_Year],[O_OrgCode],[O_OrgDesc],[S_SubObject],[S_SubDescrip],[B_BudgetAmt],[B_Initials],[B_CIPrefNo],[B_OrgBudgetAmt],[keyfield]) 
SELECT DISTINCT @year as [F_Year],[O_OrgCode],[O_OrgDesc],[S_SubObject],[S_SubDescrip], 0.00 as [B_BudgetAmt],@int as [B_Initials],null as [B_CIPrefNo],null as [B_OrgBudgetAmt],NewID()
FROM [NAOLI].[dbo].[BudgetsEditTbl]
END