如果值已经存在,我将如何停止循环?
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SD_Sproc_Result]
-- Add the parameters for the stored procedure here
@employeeid bigint,
@providercode varchar(100)
AS
BEGIN
IF NOT EXISTS(SELECT *
FROM TR_employeesprovidercode
WHERE employeeid = @employeeid
AND providercode = @providercode)
BEGIN
Insert into TR_employeesprovidercode
(employeeid, providercode)
values
(@employeeid, @providercode)
END
END
C#代码
我在C#中的代码......
foreach (ArrayList item in ArrData)
{
HCSProvider.NewProviderResult oResult; oResult =
oHCSProvider.CreateNewProvider(providercode, oProviderDetail);
DBInterface ProviderDetail = new DBInterface();
ProviderDetail.InsertProvider(
Convert.ToInt64(providercode),
Convert.ToString(oProviderDetail));
}
答案 0 :(得分:4)
NOT EXISTS首先不能很好地扩展,你仍然可以得到重复的错误。
为什么不尝试这样的事情?
...
DECLARE @rtn int
BEGIN TRY
Insert into TR_employeesprovidercode
(employeeid, providercode)
values
(@employeeid, @providercode)
SET @rtn = 0
BEGIN TRY
BEGIN CATCH
IF ERROR_NUMBER() <> 2627
RAISERROR ('real error', 16, 1)
SET @rtn = 1
END CATCH
RETURN @rtn
答案 1 :(得分:1)
将ELSE
部分添加到存储过程并返回一些常量。
IF NOT EXISTS
BEGIN
...
END
ELSE
RETURN 0;
在循环中检查返回值并从循环中断。
foreach(var item in myArray)
{
SqlCommand cmd = new SqlCommand(); // command for stored proc
...
var result = cmd.ExecuteScalar();
if(result == 0)
break;
}
答案 2 :(得分:1)
您可以在存储过程中使用和输出参数,并在条目重复时填充值。然后测试参数并在值已经存在的情况下中断循环。
Here's关于此的MySql教程。
答案 3 :(得分:0)
您需要从您可以检查的存储过程中返回一个值,然后在适当的返回值上break
循环。