在这个问题中,我将为您创建一个示例,以便您能够理解我的问题所在。
例如,我有两个数据库,名为db1和db2。这两个数据库都有一个名为Stocks的表,因为它位于旧数据库和新数据库之间。
DB1的股票表
StockCode | StockName |
123 | ChairA |
456 | ChairB |
789 | DeskA |
012 | DeskB |db2的股票表
StockCode | StockName |
abc | ChairAC |
def | ChairBD |
ghi | DeskAC |
jkl | DeskBD |我已经尝试过下面的代码,但是它重复了股票的名称。我认为,当我试图将两个表连接在一起,而db2中的一些新股票在db1中不存在时,就会出现这种情况。因此,为了匹配行数,它将复制数据。
,这是代码
SELECT
oldstock.StockCode as oldCode,
oldstock.StockName as oldName,
newstock.StockCode as newCode,
newstock.StockName as newName
FROM [db1].[dbo].[Stocks] AS oldstock
INNER JOIN [db2].[dbo].[Stocks] AS newstock
ON oldstock.StockName LIKE '%'+newstock.StockName+'%'
ORDER BY StockCode ASC这是最初的输出:

作为您的信息,旧db有16389项,新db有16550项,这意味着新db插入了新的股票项。
那么问题是,如果只有db1包含在db2股票名中,那么如何使用db2股票表数据更新db1?
如果db2股票不存在于db1股票中,则不要将数据插入db1股票表。
这是您试用SQL Fiddle的示例
发布于 2019-12-13 06:32:55
您可以尝试将当前的内部联接选择查询放置到CTE中,然后更新该CTE:
WITH cte AS (
SELECT
oldstock.StockCode as oldCode,
oldstock.StockName as oldName,
newstock.StockCode as newCode,
newstock.StockName as newName
FROM [db1].[dbo].[Stocks] AS oldstock
INNER JOIN [db2].[dbo].[Stocks] AS newstock
ON oldstock.StockName LIKE '%' + newstock.StockName + '%' AND
oldstock.StockName <> newstock.StockName
)
UPDATE cte
SET
oldCode = newCode,
oldName = newName;发布于 2019-12-13 06:36:58
使用Join
UPDATE db1
SET db1.oldCode = db2.newCode, db1.oldName = db2.newName
FROM [db1].[dbo].[Stocks] AS db1 JOIN [db2].[dbo].[Stocks] AS db2
ON db1.StockName LIKE '%' + db2.StockName + '%'https://stackoverflow.com/questions/59317238
复制相似问题