我正在使用一些代码.有几个查询的效果是,如果行中存在一些数据,则该行将使用其余数据进行更新,如果该行不存在,则会创建一个新行.它们看起来像这样:
INSERT INTO table_name (col1, col2, col3) SELECT %s AS COL1, %s AS COL2, %s AS COL3 FROM ( SELECT %s AS COL1, %s AS COL2, %s AS COL3 ) A LEFT JOIN table_name B ON B.COL1 = %s AND B.COL2 = %s --note: doesn't mention all columns here WHERE B.id IS NULL LIMIT 1
我可以模仿这种模式,它似乎有效,但我对幕后的实际情况感到困惑.任何人都可以阐明这实际上是如何运作的吗?我正在使用PostgreSQL.
简而言之:我正在为我的客户端制作一个调度程序,由于受到限制,它需要在一个excel文件中(尽可能小).因此,一个工作表作为UI工作,其他任何工作表将是表或设置.
我正在尝试使用SQL(我是新手)来处理单个工作表(名为"TblEmpDays")上的计划数据.所以我需要在此工作表中添加/更新和检索记录.我能够获得一个SELECT查询来处理一些任意数据(并粘贴到一个范围).但是,我无法上班INSERT或UPDATE上班.我看到它的结构为INSERT INTO [<table name>$] (<field names>) VALUES (<data>);.但是这在INSERT INTO语句中给出了运行时错误" '-2147217900(80040e14)'语法错误. "
我正在使用VBA来编写所有这些,并且我创建了一个SQL帮助程序类,以使查询执行更容易.
为了澄清,我的问题是:我如何构建INSERT和UPDATE查询?我错过了什么?我想尽可能多地发布相关信息,所以如果我错过任何内容,请告诉我.
类SQL:
Private pCn ' As Database
Private pResult 'As Recordset
Private pSqlStr As String
Public Property Get Result()
Result = pResult
End Property
Public Function Init()
Set pCn = CreateObject("ADODB.Connection")
With pCn
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & ThisWorkbook.FullName & ";" & _
"Extended Properties=""Excel 12.0 Macro;HDR=YES;ReadOnly=False"";"
.Open
End …Run Code Online (Sandbox Code Playgroud) daily_report我在 postgres和中有两个表summary_songs。
用于创建表的 Sql 文件位于: https: //nofile.io/f/Ef94rMFRh6C/file.sql
summary_songs我想在每天结束时更新以下条件:
userid已经不存在,则daily_report需要将记录插入到summary_songsuserid存在,则summary_songs.countid = summary_songs.countid+ daily_report.countid.我使用以下查询来更新summary_songs:
insert into summary_songs
(select * from daily_report as B)
on conflict (userid, songd)
do update set countid = countid+excluded.countid ;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
错误:没有与 ON CONFLICT 规范匹配的唯一或排除约束
对于我的应用程序,有几个实体类,User,Customer,Post等
我即将设计数据库,我想存储创建和更新实体的日期.这是它变得棘手的地方.当然有一个选择是为每个实体表添加created_timestamp和update_timestamp列但不是那个还原剂?
另一种可能性是创建一个存储此信息的日志表,并且可以使其包含对任何实体的更新的跟踪.
有什么想法吗?我倾向于实施后者.
这很奇怪...之前已经完成了很多次更新,但无法发现为什么会有所不同.虽然我现在使用.net 4.0 - 但我怀疑它的L2S实现中的一个错误.它不像是一个奇怪而精彩的应用程序.虽然我很确定这个代码在我使用RC时有效.
我还设法通过使用以下信息从头开始构建项目来重现此错误.
这里的问题是L2S生成的更新语句在set语句中没有字段.我已经尝试检查pk是否已设置(只是为什么我认为在其中需要ervery字段的原因)并且还读取了其他dbml属性的aroudn.我一直在使用linq2Sql大约1年,从来没有遇到过问题.我仍然认为我只是有一个巨大的脑屁.
注意:我已经清理了equals和GetHashCode方法来删除一些字段 - 此后问题仍然存在.我还没有清理SQL.
我有一个来自dbml的客户端类,我添加了一个名为update的方法
public partial class Client : ICopyToMe<Client>
Run Code Online (Sandbox Code Playgroud)
CopyToMe方法继承自接口
public interface ICopyToMe<T>
{
void CopyToMe(T theObject);
}
Run Code Online (Sandbox Code Playgroud)
该类还覆盖了getHashCode
public override int GetHashCode()
{
int retVal = 13 ^ ID ^ name.GetHashCode();
return retVal;
}
Run Code Online (Sandbox Code Playgroud)
和平等
public override bool Equals(object obj)
{
bool retVal = false;
Client c = obj as Client;
if (c != null)
if (c.ID == this.ID && c._name == this._name)
retVal = true;
return retVal;
}
Run Code Online (Sandbox Code Playgroud)
部分类中的更新方法
public void …Run Code Online (Sandbox Code Playgroud) 在尝试创建一个简单的PHP PDO更新函数时,如果找不到该字段会插入它,我创建了这个小片段.
function updateorcreate($table,$name,$value){
global $sodb;
$pro = $sodb->prepare("UPDATE `$table` SET value = :value WHERE field = :name");
if(!$pro){
$pro = $sodb->prepare("INSERT INTO `$table` (field,value) VALUES (:name,:value)");
}
$pro->execute(array(':name'=>$name,':value'=>$value));
}
Run Code Online (Sandbox Code Playgroud)
它不检测更新功能是否可以使用if(!$pro);我们如何使这个工作.
如何将第二条评论的文本更新为"新内容"
{
name: 'Me',
comments: [{
"author": "Joe S.",
"text": "I'm Thirsty"
},
{
"author": "Adder K.",
"text": "old content"
}]
}
Run Code Online (Sandbox Code Playgroud) [newVehicle setValue: _txtFieldVehicleNumber.text forKey:@"number"];
[newVehicle setValue: lblFuelType.text forKey:@"fueltype"];
[newVehicle setValue: lblFuelUnit.text forKey:@"fuelunit"];
[newVehicle setValue: lblDistanceUnit.text forKey:@"distanceunit"];
Run Code Online (Sandbox Code Playgroud)
我想更新名为"Vehicle"的核心数据实体,对于该实体,我有几个属性,我想更新其中一些但不是全部,当我从实体中选择特定属性时.所以我该怎么做 ??
请保持温和,我正在尝试更新 sql server 中的查询,但遇到错误。这是我在同一个数据库中的两个表和下面提供的查询,我的要求是根据表 1 更新 table2 中的列 groupCode,但我面临以下错误:
错误
消息 512,级别 16,状态 1,第 1 行子查询返回了 1 个以上的值。当子查询跟随 =、!=、<、<=、>、>= 或当子查询用作表达式时,这是不允许的。该语句已终止。
表格1
**Dept** **DeptCode** **GroupName** **GroupCode**
IT 32 Login-Els 1
IT 32 QC-Els 4
CT 20 Login-OUP 1
CT 20 XML-OUP 2
CT 20 QC-OUP 4
MECH 34 Login-CEN 1
MECH 34 XML-CEN 2
MECH 34 PAGINATION-CEN 3
MECH 34 QC-CEN 4
Run Code Online (Sandbox Code Playgroud)
表2
**Activity** **DeptCode** **Group**
Login-Els 32 NULL
QC-Els 32 NULL
Login-OUP 20 NULL
XML-OUP 20 NULL
QC-OUP 20 NULL …Run Code Online (Sandbox Code Playgroud) 对于表B,有一个名为a_id的列,它是表A的ID。因此a_id是指向表a的外键,但它只是一个整数列,并且没有设置外键约束。
对于表B中的每一行,我们需要通过在表A中创建新记录来为a_id列提供一个整数值。
在一个SQL中完成以下所有步骤的目标。
将所有数据插入表A:
insert into table A (name) values ('abc'), ('def'), ... returning id
使用步骤1返回的ID(每个ID仅应使用一次)对表B中每一行的Buck更新a_id。
update table B set a_id = id(from previous insert statement)
尝试过类似的方法:
更新表B set a_id =(从ia中选择ia.id
(插入表A(名称)值('abc'),('def'),...返回ID)为ia)
但这会带来语法错误ERROR: syntax error at or near "into"。
如何用一个SQL做到这一点?
insert-update ×10
sql ×6
postgresql ×3
sql-update ×2
.net ×1
attributes ×1
c# ×1
core-data ×1
document ×1
entity ×1
excel ×1
excel-vba ×1
ios ×1
linq-to-sql ×1
pdo ×1
php ×1
rethinkdb ×1
sql-server ×1
timestamp ×1
vba ×1