[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‘)    
时间: 2024-11-09 18:32:56

[SQL] MSSQL update 语句中的关联的相关文章

SQL Server UPDATE语句的用法详解

SQL Server UPDATE语句用于更新数据,下面就为您详细介绍SQL Server UPDATE语句语法方面的知识,希望可以让您对SQL Server UPDATE语句有更多的了解. 现实应用中数据库中的数据改动是免不了的.通常,几乎所有的用户数据库中的大部分数据都要进行某种程度的修改.在SQL Server数据库中要想修改数据库记录,就需要用UPDATE语句,UPDATE语句就是为了改变数据库中的现存数据而存在的.这条语句虽然有一些复杂的选项,但确实是最容易学习的语句之一.这是因为在大

UPDATE语句中SET部分列赋值的先后顺序有影响么?

昨天研发同事问我个问题,UPDATE语句中SET部分列赋值的先后顺序会影响结果么?以前没考虑过这个问题,因为通常我们都会UPDATE时给列赋予一个确定的值,而不是一个依赖于其他列的值. 测试环境: DROP TABLE TB1001; CREATE TABLE TB1001 ( ID INT PRIMARY KEY, C1 INT, C2 INT ); INSERT INTO TB1001 ( ID, C1, C2 ) SELECT 1,1,1 UNION SELECT 2,1,1; 更新语句为

SQL SERVER SELECT语句中加锁选项的详细说明 [转]

SQL Server提供了强大而完备的锁机制来帮助实现数据库系统的并发性和高性能.用户既能使用SQL Server的缺省设置也可以在select 语句中使用“加锁选项”来实现预期的效果. 本文介绍了SELECT语句中的各项“加锁选项”以及相应的功能说明. 功能说明: NOLOCK(不加锁) 此选项被选中时,SQL Server 在读取或修改数据时不加任何锁. 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Roll Back)中的数据, 即所谓的“

update语句中存在''语法书写方式

例如: 更新LSXTMC中F_XTBH字段为BD'中国,特殊的地方在于更新的值中存在单引号,如果仍然按如下语句更新就会报错: UPDATE LSXTMC SET F_XTBH='BD'中国'' 正确的语法如下:(使用双引号) UPDATE LSXTMC SET F_XTBH='BD''中国''' update语句中存在''语法书写方式

SQL的update语句

Update 语句 Update 语句用于修改表中的数据. 语法: UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 Person: LastName FirstName Address City Gates Bill Xuanwumen 10 Beijing Wilson   Champs-Elysees   更新某一行中的一个列 我们为 lastname 是 "Wilson" 的人添加 firstname: UPDATE Person SET First

在update语句中使用子查询

在update 中的 where 子句中使用子查询: UPDATE mg_page_log as a  SET  page_num=1 WHERE id in( SELECT id  from mg_page_log WHERE id < 100 GROUP BY visit_id) 会报: You can't specify target table 'a' for update in FROM clause 错误 所以正确的是: UPDATE mg_page_log as a ,( SELE

SQL优化 查询语句中,用 inner join 作为过滤条件和用where作为过滤条件的区别

前段时间遇到一个存储过程,参数之一是一个字符串,实际作用是在存超过中是作为一个查询条件处理的 在存储过程中,把字符串拆分成一个临时表之后作key值,作为一个查询条件,逻辑实现上有两种处理方式 insert into #t select key from split_function('传递进来的字符串',',') 第一种是与物理表做inner join,类似如下 select * from tableA a inner join tableB b on a.id=b.id inner join

sql server 2008语句中的go有什么用?

GO表示一个批处理的结束, SQLSERVER遇到Go以后就会将GO之前的语句作为一整批进行处理你在SSMS里执行的时候, 通常加不加都可以,但是如果实在SQLCMD下执行, GO就是一个执行命令了另外GO后面可以跟参数, 让整批语句执行N次, 比如GO 100

[sql]在case语句中不同情况下then的数据的数据类型不一致ORA-00932: inconsistent datatypes: expected NUMBER got CHAR

ORA-00932: inconsistent datatypes: expected NUMBER got CHAR 00932. 00000 -  "inconsistent datatypes: expected %s got %s" 1 CASE XXXXX.FILE_TYPE 2 WHEN '0' THEN NVL(TX_CNT,0) 3 ELSE XXXXX.TOT_TX_CNT 4 END ACT_TX_CNT, TX_CNT为NUMBER型,是GROUP BY 后的计数