我创建了一个查询来从源表中提取和操作数据,然后查询将其添加到临时表中。然后,单独的查询使用临时表中的数据并创建新表。
源表现在已经用新行更新了,我需要将新角色添加到我的表中。但是,我不确定在这种情况下如何更新现有表而不是创建新表。这是我的代码:
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
我想知道它是否像使用' INSERT INTO [TABLE]'再次运行此查询一样简单。更新现有的表格,但我不确定,并且没有在网上找到任何可以为我提供明确答案的答案。
这是我自己创建的第一个表,这将是我第一次使用查询来更新现有表。因此,当我不确定时,我有点担心做出改变。
提前致谢。
答案 0 :(得分:0)
希望您喜欢在Elecricity Industry工作。
如果我理解正确你有一个来源[表],那么#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 - 如果字段名称相同,则应该很难。
EDIT2:如果您对更新源表感到担心,可能需要查看SQL Server中的TRANSACTIONS。您可以执行一些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
如果您对更新感到满意,请将ROLLBACK TRANSACTION设置为COMMIT TRANSACTION
答案 1 :(得分:0)
考虑使用MERGE,它既可以更新现有行,也可以从目标表中不存在的源中插入新行,甚至可以在目标表中存在但在源表中不存在的情况下执行某些操作< / p>
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