它取决于值集的数量吗?它是否依赖于INSERT语句中的字节数?
我有一个名为Entry这样的类:
class Entry{
string Id {get;set;}
string Name {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
然后Entry使用ADO.NET 接受多个此类对象插入数据库的方法:
static void InsertEntries(IEnumerable<Entry> entries){
//build a SqlCommand object
using(SqlCommand cmd = new SqlCommand()){
...
const string refcmdText = "INSERT INTO Entries (id, name) VALUES (@id{0},@name{0});";
int count = 0;
string query = string.Empty;
//build a large query
foreach(var entry in entries){
query += string.Format(refcmdText, count);
cmd.Parameters.AddWithValue(string.Format("@id{0}",count), entry.Id);
cmd.Parameters.AddWithValue(string.Format("@name{0}",count), entry.Name);
count++;
}
cmd.CommandText=query;
//and then execute the command
...
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:我应该继续使用上面的方式发送多个insert语句(构建一个巨大的insert语句及其参数字符串并通过网络发送),或者我应该保持一个打开的连接并发送一个insert语句对于每个人Entry这样:
using(SqlCommand …Run Code Online (Sandbox Code Playgroud) 使用以下样式将多行插入表中时:
insert all
into ghazal_current (GhazalName,Rating) values('Ajab Apna Haal Hota Jo Visaal-e-Yaar Hota',5)
into ghazal_current (GhazalName,Rating) values('Apne Hothon Par Sajana Chahta Hun',4)
into ghazal_current (GhazalName,Rating) values('Shaam Se Aankh Mein Nami Si Hai',4)
into ghazal_current (GhazalName,Rating) values('Tumhe Yaad Ho Ke Na Yaad Ho',3)
select 1 from dual;
Run Code Online (Sandbox Code Playgroud)
该陈述select 1 from dual是什么意思?这是什么?
我认为我的问题的答案是显而易见的,但由于我找不到任何支持它的文件,我认为值得问.至少是为了记录.
众所周知,AUTO_INCREMENT每次INSERT执行语句时字段都会递增.它的值可以通过LAST_INSERT_ID()函数检索.MySQL手册中还提到,使用多行插入时,LAST_INSERT_ID()将返回插入行的第一个ID.我认为这是一个好主意(非常有用).
所以这是我的问题:
我可以在INSERT IGNORE INTO具有多行的语句中假设,AUTO_INCREMENT字段的插入ID 将始终是顺序的吗?请记住,由于IGNORE修改器和MySQL服务器的多用户性质,可能会发生不同的情况.
谢谢.
我正在尝试在MySQL数据库和SQL Server 2008 R2之间编写桥梁来同步表中的值.我陷入SQL Server数据库的多插入值.通常在MySQL中我使用如下查询:
INSERT INTO table (column1, column2)
VALUES(value1, value2), (value3, value4)
ON DUPLICATE KEY UPDATE column2 = VALUES(value2);
Run Code Online (Sandbox Code Playgroud)
有没有办法如何多次插入SQL Server MERGE?
谢谢你的回答
sql-server sql-server-2008-r2 multiple-insert on-duplicate-key
这是我用于在oracle数据库中插入多行的查询.但是当我在其中使用序列时,它会引发错误,如ORA-00001:唯一约束.怎么做.
INSERT ALL
INTO POSTAL_CODE( postal_code,desc)
VALUES(postal_code.NEXTVAL,'Coimbatore')
INTO POSTAL_CODE (postal_code,desc)
VALUES(postal_code.NEXTVAL,'Mumbai') SELECT * FROM DUAL;
Run Code Online (Sandbox Code Playgroud) 我正在使用下面的代码使用 tokio-postgres 插入到 Postgres 数据库,是否有更好的选择:
let members = &[obj] //obj is a struct
let mut params = Vec::<&(dyn ToSql + Sync)>::new();
let mut i = 1;
let mut qry:String = "insert into tablename(id,userid,usertype) values".to_string();
for column in members{
if(i ==1){
qry = format!("{} (${},${},${})",qry,i,i+1,i+2);
}else{
qry = format!("{}, (${},${},${})",qry,i,i+1,i+2);
}
params.push(&column.id);
params.push(&column.userid);
params.push(&column.usertype);
i = i+3;
}
println!("qry : {}",qry);
let result = p.execute(&qry, ¶ms[..]).await; //p is the pool manager
Run Code Online (Sandbox Code Playgroud) 我使用自己的管道将废弃的项目存储到PostgreSQL数据库中,几天前我进行了扩展,现在将数据存储到3个数据库中.所以,我想让每100个项目调用插入数据的管道,或者它取出项目并将它们插入100×100.
我想让它在数据库服务器上快速而不那么头疼的原因.
为简单起见假设我有两张桌子
user table (id, email)
user log table (id, date)
无论在用户表中插入什么id,都应该在user_log表中插入相同的id,否则事务应该失败.
我怎样才能做到这一点
BEGIN TRANSACTION
INSERT into user(id, email) OUTPUT Inserted.id (1, 'a@x.com', 'x'), (2, 'b@x.com', 'y')
// I also want to be able to do
INSERT into user_log(id, date) values(1, date), (2, date)
COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)