在c#中使用复合主键

时间:2017-05-24 09:28:09

标签: c# sql sql-server

我有一个sql表temp.it有4列,其中3列是主键(复合)。在对表进行插入时,我需要检查表中是否已存在复合PK。如果是,我需要更新我需要向临时表插入新行的其他行。我可以这样做吗?我不知道锄头在桌子上检查PK。请指导我。下面是插入

  string constr = ConfigurationManager.ConnectionStrings["constr"].ToString();
            using (OdbcConnection con = new OdbcConnection(constr))
            {
                try
                {
                            string query = "Insert into temp_table(Name,DeptName,Alias,City) values(name,dept,alias,city)";
                            con.Open();
                            OdbcCommand cmd = new OdbcCommand(query, con);
                            cmd.ExecuteNonQuery();

              }

这里name,dept和city是复合主键。

3 个答案:

答案 0 :(得分:1)

您的解决方案

if not exists (Select * from temp_table where Name=@name and DeptName=@dept and City=@city)
begin
     Insert into temp_table
     (Name,DeptName,Alias,City) 
     values(@name,@dept,@alias,@city)
end
else
begin
     update temp_table set Alias=@alias where Name=@name and DeptName=@dept and City=@city
end

答案 1 :(得分:1)

首先尝试更新,如果记录不存在,则更新将失败,然后您可以进行插入 这样更有效,因为每次更新成功时,只会调用一个语句。

 update temp_table 
 set    Alias = @alias 
 where  Name = @name 
 and    DeptName = @dept

 if @@rowcount = 0 then
 begin
     insert into temp_table (Name, DeptName, Alias, City) 
     values (@name, @dept, @alias, @city)
 end

答案 2 :(得分:0)

Merge命令将检查,插入和更新组合到一个命令中。

语法在这里: https://msdn.microsoft.com/en-us/library/bb510625.aspx