SQL Server CE:如果存在更新,否则插入
Posted
技术标签:
【中文标题】SQL Server CE:如果存在更新,否则插入【英文标题】:SQL Server CE : if exist update else insert 【发布时间】:2012-09-23 07:40:35 【问题描述】:如果 SQL Server CE 数据库表中尚不存在行,我如何INSERT
行,如果存在则UPDATE
它?
我尝试了很多 SQL 查询并不断出错。这不起作用。
IF EXISTS (SELECT * FROM Table1 WHERE Column1='SomeValue')
UPDATE Table1 SET (...) WHERE Column1='SomeValue'
ELSE
INSERT INTO Table1 VALUES (...)
更新:
我发现这对我有用。欢迎任何其他好的建议。
INSERT INTO Table1 VALUES (...)
SELECT (........)
WHERE NOT Exists (SELECT ........)
-- INSERT with Default value if not exist. Next, UPDATE it
UPDATE Table1 SET (...) WHERE Column1='SomeValue'
【问题讨论】:
您是否期望有任何并发性的可能性,或者该数据库是否适用于单用户应用程序? @MartinSmith,这是一款单用户移动应用。 另见:***.com/questions/728373/… 【参考方案1】:我知道你已经标记了 sql 和 sql-server-ce 但如果你愿意使用 c# 代码来解决这个问题.. :
使用 c# 和结果集,这是我使用 SQL CE 为我的移动应用程序所做的:
// UpdateRow is a struct/class to hold the data for each row
// SqlCeConn = connection string for db
SqlCeCommand cmd = new SqlCeCommand("Table1", SqlCeConn);
cmd.CommandType = CommandType.TableDirect;
cmd.IndexName = "Column1";
using (SqlCeResultSet rsltSet = cmd.ExecuteResultSet(ResultSetOptions.Scrollable | ResultSetOptions.Updatable))
if (UpdateRow.Column1> 0) // or != "" if it's string etc
if (rsltSet.Seek(DbSeekOptions.FirstEqual, UpdateRow.Column1))
FoundRecord = true;
rsltSet.Read();
if (FoundRecord)
// Update
rsltSet.SetInt32(1, UpdateRow.Column1);
rsltSet.SetInt32(2, UpdateRow.Column2);
// etc
rsltSet.Update();
else
// Insert new record
SqlCeUpdatableRecord record = rsltSet.CreateRecord();
record.SetInt32(0, UpdateRow.Column1);
record.SetInt32(1, UpdateRow.Column2);
// etc
rsltSet.Insert(record, DbInsertOptions.PositionOnInsertedRow);
cmd.Dispose();
catch (Exception e)
// Deal with exception
【讨论】:
以上是关于SQL Server CE:如果存在更新,否则插入的主要内容,如果未能解决你的问题,请参考以下文章