如果record为null,则添加值

时间:2012-11-12 22:26:33

标签: sql sql-server sql-server-2005

我有一张包含以下数据的表格:

CUSIP   SEDOL   DESC
1111    NULL    ABC Corp
1234    NULL    ABCD Corp
NULL    12      ABCDE Corp

现在我在另一个数据库服务器上有另一个表:

CUSIP   SEDOL   DESC
1111    18      ABC Corp
1234    19      ABCD Corp
1246    12      ABCDE Corp

如何根据不同数据库服务器中表中提供的值填充第一个表中的NULL值? (我正在使用SQL Server 2005)

5 个答案:

答案 0 :(得分:2)

update table1 set
sedol = (select sedol from database2.table2 where desc = table1.desc)
where sedol is null;

从您的问题中不清楚cusip是否重要,所以您可能需要:

update table1 set
sedol = (select sedol from database2.table2 where cusip = table1.cusip)
where sedol is null;

要更新cusip,请使用:

update table1 set
cusip = (select cusip from database2.table2
         where desc = table1.desc
         and sedol = table2.sedol)
where cusip is null;

答案 1 :(得分:0)

Update BadTable set BadTable.SEDOL=Coalesce(BadTable.SEDOL,GoodTable.SEDOL) from GoodTable where GoodTable.[DESC]=BadTable.[DESC]

也许

where GoodTable.[CUSID]=BadTable.[CUSID]

答案 2 :(得分:0)

update table1 t1
set t1.sedol 
   = coalesce (t1.sedol,(select top 1 sedol 
                     from table2 
                     where t1.cusip = cusip
                     and t1.desc = desc))

答案 3 :(得分:0)

首先根据Tim的评论添加链接服务器。

然后,许多像这样的查询在匹配规则上进行了贬值。

Update
  table1
Set
  Sedol = t2.Sedol
From
  table1 t1
    Inner Join
  server2.db2.schema2.table2 t2
    On t1.CusIP = t2.CusIP and t1.[Desc] = t2.[Desc] And t1.Sedol Is Null

答案 4 :(得分:0)

添加链接服务器后,您的脚本将显示为

MERGE dbo.your_table AS target
USING [AnotherServer].dbo.your_table AS source
ON (target.[DESC] = source.[DESC])
WHEN MATCHED AND (target.CUSIP IS NULL OR target.SEDOL IS NULL)
  THEN UPDATE SET target.CUSIP = source.CUSIP,
                  target.SEDOL = source.SEDOL;