sql server的 update from 语句的深究

一般来说update一个表, 使用where语句即可:

复制代码 代码如下:
UPDATE Ttest SET
    statusInd = 'ACTIVE' 
WHERE
    id = 123

注意:

update 语句后面的table名称,是不可以启用别名的。
那么此时的id字段,就是来自Ttest表的(无可厚非)

但是,如果update,还有额外的join table 条件约束,语句如下:

复制代码 代码如下:
UPDATE Ttest SET
    statusInd = 'ACTIVE'
FROM
    Tparent parent
WHERE
    Ttest.id = 123
AND Ttest.parentId = parent.id
AND parent.statusInd = 'ACTIVE'

注意:

update 后面的Ttest 不能使用别名
那么定位到,要修改的Ttest记录,就必须这样写:Ttest.id = 123

如果直接写id=123, 会分不清是 Ttest 表 还是 Tparent 表的  id
此sql语句的意思是,如果想修改自身的statusInd属性,得关联其parent的statusInd属性是否也是'ACTIVE'

此时,层级关系是使用两个表(Ttest和Tparent)来定义 。

但是如果,数据库表的设计,只是用一个表(Ttest),来表述数据之间的层级关系(Ttest.parentId = Ttest.id),
如何书写,可以实现目的呢?(如果想修改自身的statusInd属性,得关联其parent的statusInd属性是否也是'ACTIVE')

实现如下:

复制代码 代码如下:
UPDATE Ttest SET
    statusInd = 'ACTIVE'
FROM
    Ttest parent,
    Ttest
WHERE
    Ttest.id = 123
AND Ttest.parentId = parent.id
AND parent.statusInd = 'ACTIVE'

解释:

其需求是:修改自身的statusInd属性,得关联其parent的statusInd属性是否也是'ACTIVE'
update 后面的表(Ttest)不能,命名别名!
from 后面的表 也是 Ttest,但是 要update的Ttest 记录 和 from Ttest 记录并不一样 (要update 孩子,但是要from 关联其父亲)

from 后面 要多写 一个 没有别名的 Ttest ,用来指定此表的记录,就是要被update的。
而需要from join的 (Ttest)表,就必须有一个别名,来区别与update的表(Ttest)

时间: 2024-08-24 14:42:49

sql server的 update from 语句的深究的相关文章

sql server的 update from 语句的深究_MsSql

一般来说update一个表, 使用where语句即可: 复制代码 代码如下: UPDATE Ttest SET     statusInd = 'ACTIVE'  WHERE     id = 123 注意: update 语句后面的table名称,是不可以启用别名的. 那么此时的id字段,就是来自Ttest表的(无可厚非) 但是,如果update,还有额外的join table 条件约束,语句如下: 复制代码 代码如下: UPDATE Ttest SET     statusInd = 'AC

死锁问题-sql server 用这段语句,3个人一起点就容易死锁,有解决过的没有,如果解决的话,加分给你

问题描述 sql server 用这段语句,3个人一起点就容易死锁,有解决过的没有,如果解决的话,加分给你 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ BEGIN TRAN DECLARE @UserCode VARCHAR(20) SELECT TOP 1 @UserCode=usercode FROM dbo.tb_refUserCode With(RowLock,UpdLock) WHERE usestatus=0 --WHERE Use

Microsoft SQL Server 2005数据库镜像语句

Microsoft SQL Server 2005数据库镜像语句: SERVER 1 CREATE ENDPOINT DbMirroring STATE=STARTED AS TCP(LISTENER_PORT=5023) FOR DATABASE_MIRRORING(ROLE=PARTNER,ENCRYPTION=SUPPORTED) ALTER DATABASE AdventureWorks SET PARTNER='TCP://192.168.5.106:5022' SERVER 2 CR

在SQL Server的try...catch语句中获取错误消息代码的的语句

本文为大家详细介绍下如何在SQL Server的try...catch语句中获取错误消息的代码,具体示例如下,感兴趣的朋友可以参考下哈,希望对大家有所帮助   复制代码 代码如下: BEGIN TRY ... ... END TRY BEGIN CATCH DECLARE @ErrorMessage NVARCHAR(4000); DECLARE @ErrorSeverity INT; DECLARE @ErrorState INT; SELECT @ErrorMessage = ERROR_M

sql server的across join语句怎么用?用它怎么取分组结果的第一条记录呢?

问题描述 sql server的across join语句怎么用?用它怎么取分组结果的第一条记录呢? sql server的across join语句怎么用?用它怎么取分组结果的第一条记录呢? 解决方案 http://www.2cto.com/database/201509/442742.html 解决方案二: http://zhidao.baidu.com/link?url=zu-YuSRPF-4RKb_yrqC7cZm4Smbz_pWS31ltTFn6HIknGbUHgcOtH8FavG9o

SQL Server中使用 Merge 语句实现表数据之间的对比同步

表数据之间的同步有很多种实现方式,比如删除然后重新 INSERT,或者写一些其它的分支条件判断 再加以 INSERT 或者 UPDATE 等.包括在 SSIS Package 中也可以通过 Lookup, Condition Split 等多 种 Task 的组合来实现表数据之间的同步.在这里 "同步" 的意思是指每次执行一段代码的 时候能够确保 A 表的数据和 B 表的数据始终相同. 可以通过 SQL Server 中提供的 Merge 语句来实现,并且还可以将操作的细节记录下来.具

SQL Server 2000优化SELECT语句方法

本文是SQL Server SQL语句优化系列文章的第一篇.该系列文章描述了在Micosoft's SQLServer2000关系数据库管理系统中优化SELECT语句的基本技巧,我们讨论的技巧可在Microsoft's SQL Enterprise Manager或 Microsoft SQL Query Analyzer(查询分析器)提供的Microsoft图形用户界面使用. 除调优方法外,我们给你展示了最佳实践,你可应用到你的SQL语句中以提高性能(所有的例子和语法都已在Microsoft

SQL Server定义视图查询语句中不能使用的关键字

(1) 不能够带有Into关键字 我们都知道,视图其实就是一组查询语句组成.或者说,视图是封装查询语句的一个工具.在查询语句中,我们可以通过一些关键字来格式化显示的结果.如我们在平时工作中,经常会需要把某张表中的数据跟另外一张表进行合并.此时,数据库管理员就可以利用Select Into语句来完成.先把数据从某个表中查询出来,然后再添加到某个表中.当经常需要类似的操作时,我们是否可以把它制作成一张视图.每次有需要的时候,只需要运行这个视图即可,而不用每次都进行重新书写SQL代码.不过可惜的是,结

SQL Server的基本功能性语句介绍_MsSql

1 注释符注释是指程序代码中不执行的文本字符串,是对程序的说明,可以提高程序的可读性,使程序代码更易于维护,一般嵌入在程序中并以特殊的标记显示出来.在Transact-SQL中,注释可以包含在批处理.存储过程.触发器中,有两种类型的注释符:  --:这是ANSI标准的两个连字符组成的注释符,用于单行注释.  /*-*/:这是与C语言相同的程序注释符,/*用于注释文字的开头,*/用于注释文字的结尾,可以在程序中标识多行文字为注释语句. 2 输出语句(PRINT)输出语句PRINT语句用于把消息传递