我定义了一个表(参见下面的代码片段).如何添加约束或其他任何内容,以便在更改行时随时更新LastUpdate列?
CREATE TABLE dbo.Profiles
(
UserName varchar(100) NOT NULL,
LastUpdate datetime NOT NULL CONSTRAINT DF_Profiles_LastUpdate DEFAULT (getdate()),
FullName varchar(50) NOT NULL,
Birthdate smalldatetime NULL,
PageSize int NOT NULL CONSTRAINT DF_Profiles_PageSize DEFAULT ((10)),
CONSTRAINT PK_Profiles PRIMARY KEY CLUSTERED (UserName ASC),
CONSTRAINT FK_Profils_Users FOREIGN KEY (UserName) REFERENCES dbo.Users (UserName) ON UPDATE CASCADE ON DELETE CASCADE
)
Run Code Online (Sandbox Code Playgroud) 如何在Microsoft Access 2007 UPDATE中使用SELECT查询结果的表的字段.
这是选择查询:
SELECT Min(TAX.Tax_Code) AS MinOfTax_Code
FROM TAX, FUNCTIONS
WHERE (((FUNCTIONS.Func_Pure)<=[Tax_ToPrice]) AND ((FUNCTIONS.Func_Year)=[Tax_Year]))
GROUP BY FUNCTIONS.Func_ID;
Run Code Online (Sandbox Code Playgroud)
这是更新查询:
UPDATE FUNCTIONS
SET FUNCTIONS.Func_TaxRef = [Result of Select query]
Run Code Online (Sandbox Code Playgroud) 我有一个在两列上有唯一索引的表,id_parent和sort_order是准确的
+----+-----------+------------+-------------+-------------+-------------+
| id | id_parent | sort_order | some_data | other_data | more_data |
+----+-----------+------------+-------------+-------------+-------------+
| 1 | 1 | 1 | lorem ipsum | lorem ipsum | lorem ipsum |
| 2 | 1 | 2 | lorem ipsum | lorem ipsum | lorem ipsum |
| 3 | 1 | 3 | lorem ipsum | lorem ipsum | lorem ipsum |
+----+-----------+------------+-------------+-------------+-------------+
Run Code Online (Sandbox Code Playgroud)
现在我想一次性更新它们,它们的数据和sort_order.1 - 2 - 3例如,sort_order将从更改为2 - 3 - 1.
但是,当我开始运行更新语句时,唯一索引阻止我,就像预期的那样,说我不能有两行id_parent …
insert into tableA (column1)
select min(tableC.column1)
from tableB
inner join tableC on (tableC.coumn2 = tableB.column1
and tableB.column2 = tableA.column2)
group by tableA.column2
Run Code Online (Sandbox Code Playgroud)
如何根据条件将上述内容更改为group by而不是insert with group tableB.column2 = tableA.column2?
请注意我正在使用 SQL SERVER 2008.
我在PostgreSQL 9.2中有下表,其中包含时间戳:
GID [PK](BIGSERIAL),timestamp_mes(时间戳没有时区),time_diff(间隔)
1,2012-01-23 11时03分40秒,空
2,2012-01-23 11时03分42秒,空
3, 2012-01-23 11:03:44,空的
我添加了一个间隔列(time_diff),并希望用此查询产生的时差值填充它:
SELECT timestamp_mes - lag(timestamp_mes, 1)
over (order by timestamp_mes) as diff
from gc_entretien.trace order by timestamp_mes
Run Code Online (Sandbox Code Playgroud)
我尝试了以下查询来更新time_diff列,但没有成功:
UPDATE gc_entretien.trace set time_diff =
(SELECT trace.timestamp_mes - lag(trace.timestamp_mes, 1)
over (order by trace.timestamp_mes)
from gc_entretien.trace order by timestamp_mes);
Run Code Online (Sandbox Code Playgroud)
这会导致错误:
错误:用作表达式的子查询返回的多行
我应该如何使用时差查询生成的值更新time_diff列?
我正在尝试更新名称所在的最新记录John(John具有多个记录但ID不同),但我似乎处于绑定状态.我的查询有什么问题?
UPDATE messages_tbl SET is_unread=1
WHERE ReceiveTime = (SELECT MAX(ReceiveTime) FROM messages_tbl WHERE name='John')
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做这样的事情?
需要"配合" UPDATE用ORDER BY.我正在尝试使用游标,但得到错误:
Run Code Online (Sandbox Code Playgroud)cursor "cursupd" doesn't specify a line, SQL state: 24000
码:
BEGIN;
DECLARE cursUpd CURSOR FOR SELECT * FROM "table" WHERE "field" = 5760 AND "sequence" >= 0 AND "sequence" < 9 ORDER BY "sequence" DESC;
UPDATE "table" SET "sequence" = "sequence" + 2 WHERE CURRENT OF cursUpd;
CLOSE cursUpd;
COMMIT;
Run Code Online (Sandbox Code Playgroud)
怎么做正确?
没有光标,当我这样做时:
UPDATE "CableLinePoint" AS "t"
SET "sequence" = t."sequence" + 2
from (
select max("sequence") "sequence", "id"
from "CableLinePoint"
where
"CableLine" = …Run Code Online (Sandbox Code Playgroud) 我开始在我的APP中使用这2个休眠注释.
@DynamicUpdate(value=true)
@SelectBeforeUpdate(value=true)
Run Code Online (Sandbox Code Playgroud)
首先,我将尝试解释我对它的理解,以了解我是否正确.
@DynamicUpdate(value=true)
Run Code Online (Sandbox Code Playgroud)
仅更新modified values实体中的内容Hibernate needs to track those changes
@SelectBeforeUpdate(value=true)
Run Code Online (Sandbox Code Playgroud)
创建一个select之前update知道哪些属性已被更改,这在实体已在不同会话上加载和更新时很有用Hibernate is out of tracking entity changes
这2个肯定是否正确?
我主要担心的是.
在DB performance哪个更好或更快地更新所有的实体领域的一次或generate a select to know which columns update and update only the modified columns?
想象一下,我有一个MySQL表(tbl_test),其中包含以下字段:id,title,priority.
id将自动递增.我需要在插入后使用与id字段相同的值填充优先级字段.
由于我是使用MySQL触发器的新手,请告诉我我要为它编写的内容.我做了一些事情,但我认为这不是真的:
CREATE TRIGGER 'test' AFTER INSERT ON `tbl_test`
BEGIN
SET new.priority = new.id;
END
Run Code Online (Sandbox Code Playgroud)
谢谢你的协助.
我想插入或替换_on_condition.如果不满足条件,请勿插入或更换.这可能吗?
对于我的项目,我目前有两个数据收集过程.一个是快速但不能抓住一切.另一个是缓慢但捕获一切.通过快速流程,我几乎可以实时获取数据.由于速度慢,我在一天结束时使用批处理获取数据.
我的问题是:有时快速流程将"完成"一条记录(意味着它不再需要更新)在缓慢的流程之前,以及在夜间批处理过程中的当天晚些时候,"完整"记录将被替换为在慢速流程的批量数据中找到过时的"待定"记录.
我想要的是一个类似于这个伪代码的条件检查:
If(record_is_not_complete or does_not_exist)
{ INSERT or REPLACE; }
Else
{ do_nothing and move_to_the_next; }
Run Code Online (Sandbox Code Playgroud)
如果我从标准INSERT OR REPLACE示例开始:
INSERT OR REPLACE INTO UserProgress (id, status, level)
VALUES (1, 'COMPLETE', 5);
Run Code Online (Sandbox Code Playgroud)
哪个应该在UserProgress表中输入一行,条目为[1,COMPLETE,5].
如果发生以下情况:
INSERT OR REPLACE INTO UserProgress (id, status, level)
VALUES (1, 'PENDING', 4);
Run Code Online (Sandbox Code Playgroud)
我希望它跳过这个,因为已经有一个完整的记录.
我确定这是一个重复的问题.但它真的吗?这个问题有很多答案,我不确定哪种方法最好.看看我发现的所有这些例子:
我可以尝试添加一个CASE声明,我被告知它等同于一个IF-THEN-ELSE声明.正如本例中所做的那样.
我可以尝试使用SELECT或COALESCE声明VALUES.正如本例中所做的那样.
我甚至可以尝试使用一个SELECT WHERE声明.正如本例中所做的那样.
我可以尝试使用一个LEFT JOIN声明.正如本例中所做的那样.
这对SQLite来说很棒.似乎有多种方法可以为同一只猫皮肤涂抹.我是一个新手我现在很困惑.目前尚不清楚我应该使用哪种方法.
我正在寻找一个可以在一个sql语句中完成的解决方案.
*更新*
我找到了两个交易解决方案.我还在寻找单一的交易解决方案.
这有效,但使用两个事务: …
sql-update ×10
sql ×7
mysql ×3
database ×2
postgresql ×2
.net ×1
c# ×1
group-by ×1
hibernate ×1
indexing ×1
insert ×1
java ×1
select ×1
sql-order-by ×1
sql-server ×1
sqlite ×1
timestamp ×1
triggers ×1