我有一个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是复合主键。
答案 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