我有一系列需要写入SQL的数据,我应该怎么做才能检查SQL中的数据以防止将相同的数据插入表中?
要插入的示例数据:
David James John
如果第四数据John再次出现,我希望系统跳过重复的记录(约翰)。
John
到目前为止,我有:
SqlConnection myCnn = new SqlConnection(cnn); String _state = "Insert into CamNo1(platename, date, camID, path, filename) OUTPUT INSERTED.platename values(@msg, getdate(), @camID, @path, @filename)"; SqlCommand _Query = new SqlCommand(_state, myCnn); _Query.Parameters.AddWithValue("@msg", msg); _Query.Parameters.AddWithValue("@camID", camID); _Query.Parameters.AddWithValue("@path", imageFile); _Query.Parameters.AddWithValue("@filename", name); try { myCnn.Open(); string checkname = (string)_Query.ExecuteScalar(); myCnn.Close(); getcheckname = checkname; Console.WriteLine("OK"); } catch (Exception) { }
我得到了最后插入的字符串值checkname,应该怎么检查数据?
首先,可以通过使用唯一索引或约束来防止表中出现重复项。索引/约束可以工作 在演唱会 与下面的建议。如果 仅 使用唯一索引而不是以下解决方案之一,则插入重复记录将引发错误,而您将需要在另一端进行处理。
另外,我可能会通过一个存储过程来插入数据,该存储过程检查该行是否已经存在。为此,您可以使用 MERGE 语句,如下面的伪代码所示:
create procedure MyProcedure ( @Name nvarchar(100), ... ) as merge MyTable using ( select @Name,... ) as source (Name, ...) on MyTable.Name = source.Name when not matched then insert (Name,...) values (source.Name,...) when matched then update set Name = @Name,...
或者,您可以检查记录是否存在并手动插入或更新:
create procedure MyProcedure ( @Name nvarchar(100), ... ) as if not exists (select * from MyTable where Name = @Name) begin insert into MyTable (Name,...) values (@Name,...) end else begin update MyTable set ... where Name = @Name end