我试图根据来自源的记录更新目标表中的记录.例如,如果传入记录存在于目标表中,我会在目标中更新它们,否则我只需插入.我的源中有超过一百万条记录,而我的目标有4600万条记录.目标表基于日历键进行分区.我使用Informatica实现了这整个逻辑.我发现Informatica代码完全可以很好地查看Informatica会话日志,但它在更新中需要很长时间(更新一百万条记录超过5天).
有关在场景中可以采取哪些措施来改善性能的任何建议?
我有这样一张桌子:
+------+-------+
|ID | value |
+------+-------+
| 1 | 150 |
| 2 | |
| 3 | |
| 4 | |
| 5 | 530 |
| 6 | 950 |
| 7 | 651 |
+-------+------+
Run Code Online (Sandbox Code Playgroud)
我想复制最后3个值,最后我的表格如下所示:
+------+-------+
|ID | value |
+------+-------+
| 1 | 150 |
| 2 | 530 |
| 3 | 950 |
| 4 | 651 |
| 5 | 530 |
| 6 | 950 |
| 7 | …Run Code Online (Sandbox Code Playgroud) 我想update nth记录在一张桌子里
UPDATE ROW_NUMBER(3) table_name SET column1=value1, column2=value2
Run Code Online (Sandbox Code Playgroud)
这不起作用..
我需要在SQL Server中更新部分字符串。
我有:
ID IDCityVisited Names
1 10 Julya,Matheus,Donovan
2 15 Mary,Donovan,Richard
3 20 John,Bob,Andy
Run Code Online (Sandbox Code Playgroud)
我需要更新Names仅更改的列Donovan,Paul并将所有其余字符串保持原样。
谢谢
我正在尝试为特定用户更新生物列,但我得到了一个新行.通过类似的问题,但无法解决我的情况.
if (isset($_SESSION['logged_in']) && $_SESSION['name_of_user'] == $profile_name) {
$pageOwner = true;
}
if (isset($_POST['submit'])) {
$bio = $_POST['bio'];
if (empty($bio)) {
$error = "Missing Bio";
} else {
if ($member_bio->num_rows == 1) {
if ($query = $db->query("UPDATE user_account SET 'bio'='$bio' WHERE 'id_user'='$id'")) {
$ok_mesg = "Profile has been updated!!!";
} else {
$error = "ERROR on our end";
}
} else {
if ($query = $db->query("INSERT INTO user_account (bio) VALUES('$bio')")) {
$ok_msg = "Profile has been updated";
} else { …Run Code Online (Sandbox Code Playgroud) 有一个数据库表有一个更新触发器.每当更新列时,都会自动计算其中一列.
我已经调整了触发器,我想再次在所有行上运行它.在SQL Server Management Studio中,如果我在表上选择"编辑前200行"并编辑其中一行,则更新触发器可以正常工作.但是当我写一个像这样的查询时:
UPDATE MyTable
SET SomeIrrelevantColumn = 0
Run Code Online (Sandbox Code Playgroud)
触发器不起作用,应该由触发器计算的列保持不变.
如何在所有行上手动运行触发器?
编辑:这是触发器:
USE [MY_DATABASE]
GO
/****** Object: Trigger [dbo].[MY_TABLE_AUER] Script Date: 04/24/2013 00:05:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[MY_TABLE_AUER]
ON [dbo].[MY_TABLE]
AFTER UPDATE
AS
DECLARE @UPD_COLUMN_A int,
@INS_COLUMN_A int,
@UPD_COLUMN_B int,
@UPD_COLUMN_C varchar(255),
@UPD_COLUMN_D varchar(255),
@UPD_COLUMN_E int,
@UPD_COLUMN_F datetime
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT @UPD_COLUMN_A …Run Code Online (Sandbox Code Playgroud) 我有一个int类型的列和一个varchar(255)类型的列.
我是否可以遍历数据库中的每一行并检查varchar(255)列中的某个字符串,如果找到该字符串,则将其在我的int列中找到的行的某个int设置为值我的选择?
因此,如果在行1上找到"abc",我可以将int列值设置为2吗?
任何帮助,将不胜感激,
问候
我有一个要求,我想获取表中最后更新行的ID,我想使用此id进行其他操作.
我没有像UpdatedOn这样的列,所以我可以引用该列.
那么还有任何函数,比如scope_identity和@@ identity(它给出了我最后插入行id的id).
请帮帮我.
我有一个存储过程,我只想在参数为NOT NULL时使用SYSDATE更新表中的值.
在下面的SQL中,如果pETime IS为NULL,我想将SYSENDDATE设置为NULL,否则为SYSDATE
UPDATE OLCACT SET
ENDDATE = pETime,
SYSENDDATE = SYSDATE,
GRD = pGRD,
PASS = v_pass
Run Code Online (Sandbox Code Playgroud)
不知道如何使用NVL或COALESCE来做到这一点.
我试图将记录中的列更新为true,以指示该记录是表中的活动记录.但是,通过更新此记录,我必须将该列的所有其他记录更新为false.有没有办法在一个SQL语句中执行此操作?我可以用两个这样的语句来做:
UPDATE My_Table
SET is_group_active = 0
UPDATE My_Table
SET is_group_active = 1
WHERE group_id = 2;
Run Code Online (Sandbox Code Playgroud) sql-update ×10
sql ×9
sql-server ×5
database ×2
oracle ×2
coalesce ×1
mysql ×1
php ×1
postgresql ×1
self-join ×1
sql-insert ×1
triggers ×1