相关疑难解决方法(0)

SQL Server上INSERT或UPDATE的解决方案

假设一个表结构MyTable(KEY, datafield1, datafield2...).

通常我想要更新现有记录,或者如果新记录不存在则插入新记录.

实质上:

IF (key exists)
  run update command
ELSE
  run insert command
Run Code Online (Sandbox Code Playgroud)

写这个的最佳表现方式是什么?

sql database sql-server insert upsert

564
推荐指数
11
解决办法
60万
查看次数

SQLite - UPSERT*不*INSERT或REPLACE

http://en.wikipedia.org/wiki/Upsert

在SQL Server上插入更新存储过程

在SQLite中有没有一些我没想到的聪明方法?

基本上,如果记录存在,我想更新四列中的三列,如果它不存在,我想用第四列的默认(NUL)值插入记录.

ID是主键,因此UPSERT只会有一条记录.

(我试图避免SELECT的开销,以确定我是否需要更新或插入显然)

建议?


我无法在SQLite网站上确认SQL CREATE的语法.我还没有构建一个演示来测试它,但它似乎不支持..

如果是,我有三列,所以它实际上看起来像:

CREATE TABLE table1( 
    id INTEGER PRIMARY KEY ON CONFLICT REPLACE, 
    Blob1 BLOB ON CONFLICT REPLACE, 
    Blob2 BLOB ON CONFLICT REPLACE, 
    Blob3 BLOB 
);
Run Code Online (Sandbox Code Playgroud)

但是前两个blob不会引起冲突,只有ID会因此我asusme Blob1和Blob2不会被替换(根据需要)


绑定数据时SQLite中的UPDATE是一个完整的事务,这意味着每个要更新的发送行都需要:Prepare/Bind/Step/Finalize语句,与允许使用重置函数的INSERT不同

语句对象的生命周期如下:

  1. 使用sqlite3_prepare_v2()创建对象
  2. 使用sqlite3_bind_接口将值绑定到主机参数.
  3. 通过调用sqlite3_step()运行SQL
  4. 使用sqlite3_reset()重置语句,然后返回步骤2并重复.
  5. 使用sqlite3_finalize()销毁语句对象.

更新我猜测与INSERT相比速度慢,但它与使用主键的SELECT相比如何呢?

也许我应该使用select来读取第4列(Blob3),然后使用REPLACE编写一条新记录,将原始的第4列与前3列的新数据混合在一起?

sql sqlite upsert

505
推荐指数
11
解决办法
28万
查看次数

SQL REP 2005实现MySQL REPLACE INTO?

MySQL有这个非常有用但又很合适的REPLACE INTOSQL命令.

这可以在SQL Server 2005中轻松模拟吗?

开始一个新的事务,在做了Select(),然后要么UPDATEINSERTCOMMIT始终是一个痛苦的一点点,在应用程序中做特别是当,因此能始终保持2个版本的声明.

我想知道是否有一种简单而通用的方法将这样的功能实现到SQL Server 2005中?

mysql sql-server sql-server-2005

83
推荐指数
4
解决办法
4万
查看次数

SQLite"INSERT OR REPLACE INTO"与"UPDATE ... WHERE"

我以前从未见过INSERT OR REPLACE INTO names (id, name) VALUES (1, "John")SQL中使用的语法,我想知道它为什么比它好UPDATE names SET name = "John" WHERE id = 1.是否有任何理由使用其中一个.这种语法是否特定于SQLite?

sqlite upsert

58
推荐指数
4
解决办法
11万
查看次数

Android SQLite INSERT或REPLACE

我在SQLite中尝试INSERT OR REPLACE语法到目前为止没有成功,因为没有插入行.

我的Create表查询是

 create table providers (provider_id text not null, provider_name text not null,  provider_channel_id text not null, channel_name text not null);CREATE UNIQUE INDEX channel_id ON providers (provider_channel_id);
Run Code Online (Sandbox Code Playgroud)

我的INSERT或替换查询是

INSERT OR REPLACE INTO providers (provider_channel_id, channel_name, provider_id, provider_name) VALUES ('1', '2', '3', '4')
Run Code Online (Sandbox Code Playgroud)

谢谢

sqlite android insert

6
推荐指数
1
解决办法
2万
查看次数

标签 统计

sqlite ×3

upsert ×3

insert ×2

sql ×2

sql-server ×2

android ×1

database ×1

mysql ×1

sql-server-2005 ×1