Sql server 验证大规模SQL更新命令的语法

Sql server 验证大规模SQL更新命令的语法,sql-server,join,sql-update,Sql Server,Join,Sql Update,我是SQL Server新手,正在清理事务数据库。但是,为了完成最后一步,我需要使用另一个数据库的另一个表中另一列的值更新一个数据库的一个表中的一列 我找到了一个SQL更新代码片段,并根据我们自己的需要重新编写了它,但希望有人在我点击执行按钮之前对它进行一次检查,因为更新会影响数十万条条目 以下是两个数据库: 数据库1:移动 表1:ItemMovement 第1列:LongDescription(数据类型:text/最多40个字符) 数据库2:项目 表2:ItemRecord 第2列:说明

我是SQL Server新手,正在清理事务数据库。但是,为了完成最后一步,我需要使用另一个数据库的另一个表中另一列的值更新一个数据库的一个表中的一列

我找到了一个SQL更新代码片段,并根据我们自己的需要重新编写了它,但希望有人在我点击执行按钮之前对它进行一次检查,因为更新会影响数十万条条目

以下是两个数据库:

数据库1:
移动

  • 表1:
    ItemMovement
  • 第1列:
    LongDescription
    (数据类型:text/最多40个字符)
数据库2:
项目

  • 表2:
    ItemRecord
  • 第2列:
    说明
    (数据类型:文本/最多20个字符)
目标:从db1将
Column1
设置为db2中
column2
的值

以下是代码片段:

update table1
set table1.longdescription = table2.description
from movement..itemmovement as table1
inner join item..itemrecord as table2 on table1.itemcode = table2.itemcode
where table1.longdescription <> table2.description

非常感谢

您不一定需要为表添加别名,但我建议您这样做,以加快键入速度并减少键入错误的机会

update m
set m.longdescription = i.description
from movement..itemmovement as m
inner join item..itemrecord as i on m.itemcode = i.itemcode
where m.longdescription <> i.description
这里的语法是
altertableitemmotation
添加一个名为longdescription\u test
的新列,数据类型为
varchar(100)
。如果使用SSMS创建新列,SSMS将在后台运行相同的alter table语句来创建新列

然后,您可以执行

update m
set m.longdescription_test = i.description
from movement..itemmovement as m
inner join item..itemrecord as i on m.itemcode = i.itemcode
where m.longdescription <> i.description

如果更新未按预期成功,您可以截断itemmovement并将数据从itemmovement\u备份中复制回来。

Zedfoxus对此提供了很好的解释,我对此表示感谢。这是下一次很好的参考。在阅读了一些语法示例之后,我对能够运行OP中的第二个SQL update查询充满信心。幸运的是,这里的数据不一定是“活动的”,因此即使在操作时间内,损坏任何东西的风险也很低。鉴于数据的性质,更新后的数据执行得非常完美,更新了所有345000个条目

这个问题看起来相当不错。为什么不创建一个名为
movement.itemmovement.longdescription\u test
的新列,并用这个查询更新它呢?更新后,您可以抽查该字段中的信息是否正确。如果正确,只需运行
update movement.itemmovement set longdescription=longdescription\u test
,然后删除
longdescription\u test
列即可。我在SQL上是“谷歌家庭教育”,只在一个表中学习select语句和更新。我不知道你可以用这种方式创建一个专栏。你能详细解释一下语法吗?或者如果我使用SQLExpress的GUI创建它,它会是一样的吗?顺便说一句,我用更直接的更新查询更新了我的OP。想法?谁给你这个任务的?他们知道你在问这样的问题吗?我给了自己这个任务。我是湾区一个小型市场的所有者和运营商,该市场使用NCR的ACS软件。不过,它是一块巨石,有十多年的附加组件和补丁。最糟糕的是一个非常过时的SQLExpress 2005后端,它存放着我们10000多本PLU和电子杂志。PLU的大部分数据都是他们从其他市场转储数据以帮助我们启动和运行时留下的垃圾。我最好从头开始建立PLU数据库。5年后,随着对系统的更好理解,我正在采取步骤清理SQL数据库。
use movement;
alter table itemmovement add column longdescription_test varchar(100);
update m
set m.longdescription_test = i.description
from movement..itemmovement as m
inner join item..itemrecord as i on m.itemcode = i.itemcode
where m.longdescription <> i.description
select * from movement..itemmovement 
where longdescription <> longdescription_test 
  and longdescription_test is not null
use movement;
select * into itemmovement_backup from itemmovement;