将数据从临时表插入到现有表中



我创建了一个查询来从源表中提取和操作数据,然后查询将其添加到临时表中。然后,单独的查询使用临时表中的数据并创建一个新表。

源表现已更新为新行,我需要将新角色添加到我的表中。但是,我不确定在这种情况下我将如何更新现有表,而不是创建一个新表。这是我的代码:

select ID, Date, 
rtrim(ltrim(replace(AccountNumber,'AccountNumber: ',''))) 'AccountNumber',
replace(MPAN,'MPAN: ','') 'MPAN',
replace(MSN,'MeterSerialNumber: ','') 'MSN',
replace(ReadingDate,'ReadingDate: ','') 'ReadingDate',
replace(RegisterID1,'RegisterID1: ','') 'RegisterID1',
replace(Reading1,'Reading1: ','') 'Reading1',
replace(RegisterID2,'RegisterID2: ','') 'RegisterID2',
replace(Reading2,'Reading2: ','') 'Reading2',
Status
INTO [NEW TABLE]
FROM #TEMPTABLE
Order by date desc
drop table #TEMPTABLE

我想知道它是否像使用"插入 [TABLE]"再次运行此查询来更新现有表一样简单,但我不确定,也没有在网上找到任何可以让我明确回答我的情况的东西。

这是我自己创建的第一个表,这将是我第一次使用查询来更新现有表。因此,当我不确定时,我有点担心进行更改。

提前谢谢。

希望您喜欢在电子行业工作。

如果我理解正确,您有一个来源[表],然后是 #TempTable。

您正在从 [表] 中提取数据并对其进行操作,然后您想将其放回 [表] 中。这应该通过 UPDATE 语句完成,为了最好地做到这一点,请从 [Table] 中获取主键。

--Get your Temporary Data
SELECT 
ID,
MPAN,
MSN,
--etc...
INTO #TEMPTABLE
FROM [Table]
--DO your data manipulation
UPDATE #TEMPTABLE
SET MSN = LTRIM(RTRIM(MSN)) --Or whatever your actions are
--Show that your changes have been applied correctly
SELECT * FROM #TEMPTABLE

--apply values back to source table
UPDATE org 
SET org.MPAN = tmp.MPAN,
org.MSN = tmp.MSN
FROM #TEMPTABLE tmp
INNER JOIN [Table] org ON org.ID = tmp.ID

编辑:我注意到你在说如果源数据发生了变化,即[表中的数据],你将如何处理这个问题。在这种情况下,您将反向进行更新,因此您将使用 [Table] 中的值更新 #TEMPTABLE - 如果字段名称相同,这应该很困难。

编辑2:如果您担心更新源表,您可能需要查看SQL Server中的事务。您可以执行一些SQL,查看更改,然后在事务开始时将所做的任何操作回滚到数据状态。

BEGIN TRANSACTION 
SELECT * FROM [Table] WHERE ID = 12 --Still there
DELETE FROM [TABLE] WHERE ID = 12 --Example
SELECT * FROM [Table] WHERE ID = 12 --No longer there
ROLLBACK TRANSACTION 
SELECT * FROM [Table] WHERE ID = 12 --Still there

当您对更新感到满意时,将"回滚事务"设置为"提交事务"

考虑使用 MERGE,它要么更新现有行,要么从源插入目标表中尚不存在的新行,或者如果目标表中有行但源表中不存在,甚至执行某些操作

MERGE <target_table> [AS TARGET]
USING <table_source> [AS SOURCE]
ON <search_condition> --For example ColumnSource = ColumnTable
WHEN MATCHED --Rows already exist
THEN UPDATE target_table SET ... --Do Update for example
WHEN NOT MATCHED BY TARGET --Rows not exist on Target Table
THEN INSERT(...) VALUES(...) --Do Insert for example
WHEN NOT MATCHED BY SOURCE --Rows not exist on Source table but exists on Target Table
THEN DELETE ... --Do Delete for example

最新更新