[英]SQL Server stored procedure is inserting two records
My stored procedure should clone the item once, but it's creating two cloned records. 我的存储过程应该克隆一次该项目,但是它将创建两个克隆的记录。
My C# program has a button that calls this method. 我的C#程序有一个调用此方法的按钮。 Debugging has it only fire once and returns the 2nd cloned item's neweventid
调试仅触发一次并返回第二个克隆项的neweventid
protected void cloneEvent(object sender, EventArgs e)
{
using (SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["AppConnection"].ConnectionString))
{
using (SqlCommand myCommand = new SqlCommand("addRecycleEventAcceptedMaterialsClone"))
{
//object returnValue;
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Connection = myConnection;
myCommand.Parameters.AddWithValue("@event_id", qsEventId);
myConnection.Open();
myCommand.ExecuteNonQuery();
//returnValue = myCommand.ExecuteScalar();
NewEventID = (int)myCommand.ExecuteScalar();
}
}
Response.Redirect("eventDetail.aspx?eventid=" + NewEventID);
}
I checked and no duplicate event_id's it is a primary key/ Identity column 我检查了并且没有重复的event_id是主键/标识列
ALTER PROCEDURE [dbo].[addRecycleEventAcceptedMaterialsClone]
-- Add the parameters for the stored procedure here
--Pass in the original event_id
@event_id int
--@newEvent_id INT OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
INSERT INTO RECYCLE_EVENT (event_nm, start_dt, end_dt, start_tm, end_tm,
website_ad, address_ad, city_nm, state_cd, zip_cd,
county_id, description_ds, moreinfo_ds,
latitude, longitude, phone_nr)
SELECT
event_nm, start_dt, end_dt, start_tm, end_tm,
website_ad, address_ad, city_nm, state_cd, zip_cd,
county_id, description_ds, moreinfo_ds,
latitude, longitude, phone_nr
FROM
RECYCLE_EVENT
WHERE
event_id = @event_id
--SET @newEvent_id = IDENT_CURRENT('RECYCLE_EVENT');
--SELECT @newEvent_id = SCOPE_IDENTITY()
SELECT CAST(scope_identity() AS int);
--SELECT @newEvent_id AS newEventID
--NEW CLONED EVENT HAS BEEN ADDED AND A NEW ID (newEventID) has been generated.
--NOW INSERT all materials accepted for the @event_id and insert them into the RECYCLER_EVENT_MATERIALS_ACCEPTED table
--Give it the newEventID
INSERT INTO RECYCLER_EVENT_MATERIALS_ACCEPTED (
event_id,
material_type_id,
acceptance_cd,
residential_fl,
commercial_fl,
service_type_cd,
end_dt,
event_material_cloned_id
)
SELECT
IDENT_CURRENT('RECYCLE_EVENT'),
material_type_id,
acceptance_cd,
residential_fl,
commercial_fl,
service_type_cd,
end_dt,
event_material_id
FROM RECYCLER_EVENT_MATERIALS_ACCEPTED
where event_id = @event_id
--Grab all the records that have the old event_material_id
--insert a new row using the same county id and the new event_material_id
--eventid-76: material-id's: 18, 21, 22
--eventid-124: material-id's: 24, 25, 26, 27, 28, 29, 30, 31, 32, 33
INSERT INTO RECYCLER_EVENT_COUNTY_SERVED (
county_id,
event_material_id )
SELECT s.county_id, a.event_material_id
FROM RECYCLER_EVENT_COUNTY_SERVED s
INNER JOIN RECYCLER_EVENT_MATERIALS_ACCEPTED a ON s.event_material_id = a.event_material_cloned_id
Thanks!! 谢谢!!
您正在代码中执行两次,首先是通过ExecuteNonQuery
,然后是ExecuteScalar
,因此插入两次而不是一次。
you are executing the stored procedure twice, 您执行了两次存储过程,
myCommand.ExecuteNonQuery();
NewEventID = (int)myCommand.ExecuteScalar();
Both call the insert, I would comment out the first line. 两者都称为插入,我将第一行注释掉。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.