[SQL] MSSQL update 语句中的关联
将tableA 表中的所有title 用tableB中的titlename 更新掉,如果tableB中存在对应的关系
update tableA as a set a.title = (select b.titlename from tableB as b where a.id =b.xid)
上面的写法,无法在MSSQL中进行执行,因此
我们可以使用函数变相 脚本
传入参数相同
update tableA set title =fn_getXTitle(id)
fn_getXTitle
ALTER FUNCTION [dbo].[fn_getXTitle]
(
@id nVARCHAR(50)
)
RETURNS nVARCHAR (50) AS
BEGIN
declare @title nvarchar(50)
set @title =select b.titlename from tableB as b where b.xid =@id RETURN @title end
传入参数不同
--创建功能函数
create FUNCTION [dbo].[fn_getdatafromoldve]
(
@OLDVE nVARCHAR(50)
,@Type nVARCHAR(50)
)
RETURNS nVARCHAR (50)
AS
BEGIN
declare @BO_ID nvarchar(50)
declare @NEWVE nvarchar(50)
declare @PjtNO_X nvarchar(50) IF @TYPE ='M'
BEGIN
set @NEWVE =(select top 1 NEWVE from [XXXX].[dbo].[MIG_MAPPING1] where OLDVE =@OLDVE and FIELDNAME='PSPIX')
if @NEWVE is not null
begin
set @BO_ID =(select top 1 BO_ID from [XXXX].[dbo].[MIG_ORDER_BASE] WHERE ORDER_ID =@NEWVE)
if @BO_ID is not null
begin
RETURN @BO_ID
end
else
begin
RETURN @OLDVE
end end
else
begin
RETURN @OLDVE
end
END
IF @TYPE ='P'
BEGIN
set @NEWVE =(select top 1 NEWVE from [XXXX].[dbo].[MIG_MAPPING1] where OLDVE =@OLDVE and FIELDNAME ='PSPID')
if @NEWVE is not null
begin
RETURN @NEWVE
end
else
begin
RETURN @OLDVE
end END
IF @TYPE ='PX'
BEGIN
set @PjtNO_X =(select top 1 NEWVE from [XXXX].[dbo].[MIG_MAPPING1] where OLDVE =@OLDVE and FIELDNAME ='PSPIX') if @PjtNO_X is not null
begin
RETURN @PjtNO_X
end
else
begin
RETURN @OLDVE
end END RETURN @OLDVE
END
--执行的脚本
UPDATE [XXXX].[dbo].[tb_PrjMethod] set [PjtNo]=[dbo].[fn_getdatafromoldve](PjtNo,'P')
[SQL] MSSQL update 语句中的关联的更多相关文章
- UPDATE语句中SET部分列赋值的先后顺序有影响么?
昨天研发同事问我个问题,UPDATE语句中SET部分列赋值的先后顺序会影响结果么?以前没考虑过这个问题,因为通常我们都会UPDATE时给列赋予一个确定的值,而不是一个依赖于其他列的值. 测试环境: D ...
- 子查询在UPDATE 语句中的应用
在UPDATE语句中可以在更新列表中以及WHERE语句使用子查询.下面演示一个将图书的出版日期全部更新为所有图书中的最新出版日期,SQL语句如下: UPDATE T_Book SET FYearPub ...
- SQL Server UPDATE语句的用法详解
SQL Server UPDATE语句用于更新数据,下面就为您详细介绍SQL Server UPDATE语句语法方面的知识,希望可以让您对SQL Server UPDATE语句有更多的了解. 现实应用 ...
- SQL SERVER SELECT语句中加锁选项的详细说明
共享锁(读锁)和排他锁(写锁) 共享锁(S锁):共享 (S) 用于不更改或不更新数据的操作(只读操作),如 SELECT 语句. 如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能 ...
- Mybatis&orcale update语句中接收参数为对象
Mybatis的 mapper.xml 中 update 语句使用 if 标签判断对像属性是否为空值. UserDTO是传过来参数的类型,userDTO是在mapperDao接口中给更新方法的参数起的 ...
- SQL SERVER SELECT语句中加锁选项的详细说明 [转]
SQL Server提供了强大而完备的锁机制来帮助实现数据库系统的并发性和高性能.用户既能使用SQL Server的缺省设置也可以在select 语句中使用“加锁选项”来实现预期的效果. 本文介绍了S ...
- sql server update语句
update语句 --Update 语句用于修改表中的数据 语法:update 表名称 set 列名称 = 新值 where 列名称 = 某值 --更新某一行的若干列,set字句中用','隔开
- 使用PL/SQL能查询oracle中数据,在for update 语句中一直卡住
原因:在oracle中,执行了update或者insert语句后,都会要求commit,如果不commit却强制关闭连接,oracle就会将这条提交的记录锁住.下次就不能执行增删操作. 解决:1.查询 ...
- 【SQL】查询语句中in和exists的区别
in in可以分为三类: 一. 形如select * from t1 where f1 in ( &apos:a &apos:, &apos:b &apos:),应该和 ...
随机推荐
- Entity Framework优化一:引发了“System.Data.Entity.Core.EntityCommandExecutionException”类型的异常
错误信息: “System.Data.Entity.Core.EntityCommandExecutionException”类型的异常在 EntityFramework.SqlServer.dll ...
- LINQ操作符三:限制操作符
where是限制操作符,它将过滤标准应用在序列上,按照提供的逻辑对序列中的数据进行过滤. where操作符不启动查询的执行.当开始对序列进行遍历时才开始执行,此时过滤条件将被应用到查询中. 示例: / ...
- vmware下ubuntu不能上网 => 恢复默认虚拟网络
1.关闭虚拟机ubuntu 2.打开:编辑=> 虚拟网络编辑器 3.打开后点击左下角恢复默认 4.重启ubuntu就可以了
- PHP不能不看的50个细节!
1. 用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量, 单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的”函数”(译注:PHP ...
- Graying the black box: Understanding DQNs
Zahavy, Tom, Nir Ben-Zrihem, and Shie Mannor. "Graying the black box: Understanding DQNs." ...
- fprintf宏
最近在调试程序,使用printf函数和调试信息都不能在终端输出,所以使用比较笨的方法.将调试信息写到文件中,再查看文件.由于要多次使用fprintf函数,所以将其写成宏. 参考链接: http://w ...
- JDK中的序列化和反序列化
题外话:诸事缠身,不知不觉距离上一篇就将近一个月了,读书不易,学习不易,唯有坚持. 写来写去始终不满意,索性贴一个比较好的文章吧! 参考: [Java基础]序列化与反序列化深入分析
- bootstrap -- css -- 文字、列表
文字 <small></small>:呈现小号字体效果. <big></big>:程序大号字体效果 <abbr></abbr>: ...
- Kubernetes(一)初探
Kubernetes是Google开源的容器集群管理系统.它构建于docker技术之上,为容器化的应用提供资源调度.部署运行.服务发现.扩容缩容等整一套功能,本质上可看作是基于容器技术的mini-Pa ...
- JavaSE集合(八)之Map
前面给大家介绍了集合家族中的Collection家族,这一篇给大家分享的是集合中的另一个家族就是Map家族.以前的时候学习Map的时候没有很认真的去学习,我觉得很多东西还是不是很清楚. 这次我将总结的 ...