请教:这段含FROM子句的SQL UPDATE语句具体含义是什么?
解析带FROM子句的SQL UPDATE语句
先看你给出的SQL语句:
UPDATE trgt SET trgt.User = dbo.ScrambleEmail ( @Mode, @Key, trgt.[User] ) FROM [company].[User_Group] trgt
这是SQL Server特有的UPDATE...FROM语法,属于更灵活的批量更新写法,下面拆解各部分含义:
trgt是[company].[User_Group]表的别名,UPDATE trgt明确指定要更新的是这个别名指代的表。FROM [company].[User_Group] trgt这行是给目标表起别名,同时定义更新操作的数据源(这里就是表自身)。这种写法的核心优势是支持多表关联更新,比如从其他表取数据来更新当前表时,比常规UPDATE写法逻辑更清晰。SET语句调用自定义函数dbo.ScrambleEmail,将每行的User字段值,搭配@Mode、@Key两个参数传入函数,再把函数返回的结果覆盖原User字段。
没有WHERE子句的原因很简单:这条语句的逻辑是更新[company].[User_Group]表里的每一行,不需要筛选特定记录,所以省略了WHERE。如果加上WHERE子句,就只会更新符合条件的行。
对比常规全表更新写法,下面这段和你给出的语句效果完全一致:
UPDATE [company].[User_Group] SET [User] = dbo.ScrambleEmail(@Mode, @Key, [User])
内容的提问来源于stack exchange,提问作者Derek Chen
相关产品推荐
相关产品推荐

