如何停止插入?

时间:2011-03-30 05:21:13

标签: c# sql sql-server

如果值已经存在,我将如何停止循环?

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));

}

4 个答案:

答案 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循环。