C# 存储过程插入或更新数据表问题?

C# stored procedure insert or update with DataTable problem?

我想用下面的代码添加或更新。我收到以下错误。我应该如何编辑此代码?

Must declare the scalar variable "@UyeID".
Incorrect syntax near the keyword 'ELSE'.

我的代码:

CREATE TYPE [dbo].[BcgTarihiType] AS TABLE
(
    [UyeID] int NOT NULL,
    [BcgTarihi] [nvarchar](30) NULL
)
GO

CREATE PROCEDURE Insert_BcgTarihleri
    (@tblBcgTarihleri BcgTarihiType READONLY)
AS            
BEGIN                
    IF EXISTS (SELECT 1 FROM BcgTarihleri 
               WHERE UyeID = @UyeID AND BcgTarihi = @BcgTarihi)
    BEGIN                     
        UPDATE BcgTarihleri 
        SET UyeID = @UyeID, BcgTarihi = @BcgTarihi 
        WHERE UyeID = @UyeID                        
    END
    ELSE
    BEGIN
        INSERT INTO BcgTarihleri 
        VALUES (@UyeID, @BcgTarihi)
    END
END 

我也想这样问。下面的代码有效,但我只能 add.How 如果存在数据,可以更新吗?

CREATE TYPE [dbo].[BcgTarihiType] AS TABLE(
    [UyeID] int NOT NULL,
    [BcgTarihi] [nvarchar](30) NULL
)    
GO
CREATE PROCEDURE Insert_BcgTarihleri
(                
    @tblBcgTarihleri BcgTarihiType READONLY
)
AS            
BEGIN               
    INSERT into BcgTarihleri (UyeID,BcgTarihi)
    SELECT UyeID, BcgTarihi FROM @tblBcgTarihleri;    
END  

@Boris Makhlin,@Dale K 谢谢你的帮助我用下面的代码解决了我的问题

CREATE TYPE [dbo].[BcgTarihiType] AS TABLE(
            [UyeID] int NOT NULL,
            [BcgTarihi] [nvarchar](30) NULL
        )    
        GO            
        CREATE PROCEDURE [dbo].[Update_BcgTarihleri]
              @tblBcgTarihleri BcgTarihiType READONLY
        AS
        BEGIN
              SET NOCOUNT ON;

              MERGE INTO BcgTarihleri b1
              USING @tblBcgTarihleri b2
              ON b1.UyeID = b2.UyeID AND b1.BcgTarihi = b2.BcgTarihi
              WHEN MATCHED THEN
              UPDATE SET b1.UyeID = b2.UyeID
                    ,b1.BcgTarihi = b2.BcgTarihi
              WHEN NOT MATCHED THEN
              INSERT VALUES(b2.UyeID, b2.BcgTarihi);
        END