我使用SQL Server Management Studio编写了这个存储过程。
如果我在编辑器中执行它并手动分配一个formname和一个用户ID,它可以正常清理不匹配任何内容的设置
ALTER PROCEDURE [dbo].[Handover_DeleteBadParams]
@UserID varchar(10),
@formName varchar (30)
as
begin
with deletethese as
(
select
UserID, Param
from
BI.dbo.Handover_RDL_SavedSettings userSettings
left join
BI.dbo.Handover_UI form on Form.FormName = userSettings.FormName
and userSettings.Param = Form.ItemValue
where
userSettings.FormName = @UserID
and userSettings.UserID = @formName
and Form.FormName IS NULL)
Delete from S
from bi.dbo.Handover_RDL_SavedSettings S
join deletethese D on S.UserId = D.UserID and S.Param = D.Param;
end
然后我使用C#
调用存储过程using (SqlCommand kill = new SqlCommand("Handover_DeleteBadParams",cc))
{
kill.CommandType = CommandType.StoredProcedure;
kill.Parameters.Add("@UserID", SqlDbType.VarChar).Value = userID;
kill.Parameters.Add("@formName", SqlDbType.VarChar).Value = working_form_name;
kill.Connection.Open();
kill.ExecuteNonQuery();
kill.Connection.Close();
}
我在执行过程中没有任何错误或任何反馈......我在这里做错了什么?
答案 0 :(得分:2)
我注意到的一个问题是,在您的存储过程中,您的参数似乎已反转:
where userSettings.FormName = @UserID
and userSettings.UserID = @formName
应该是
where userSettings.FormName = @formName
and userSettings.UserID = @UserID
答案 1 :(得分:0)
由于它执行时没有任何错误,但根本没有删除任何内容,因此我们必须断定您的userID
和/或working_form_name
不包含您认为他们所做的值。
在调用之前在C#中设置断点,并检查值以验证这是否是问题。