我将此表命名为 table1
id uniquefield field1 field2
1 11 test test2
2 12 test2 test3
我在临时表 #temp1
id uniquefield field1 field2
1 11 test test2
2 12 test2 test3
3 13 test4 test5
4 14 test5 test6
现在,我想要发生的是我想从#temp1
表传输所有数据。如果table1表中不存在数据,它将插入,如果存在则会更新。
有人知道如何使用SQL Server或动态SQL吗?
希望能找到你的回复。
答案 0 :(得分:3)
在你提到的情况下,临时表也没有什么不同。不同之处在于它们仅适用于用户的当前连接;当用户与实例断开连接时,它们会自动删除。因此,您可以像处理任何其他SQL表一样处理这些表,并使用MERGE查询来实现此数据操作。
假设可以将uniquefield列视为这些表之间的链接。
MERGE table1 t
USING #temp1 t1
ON t.uniquefield = t1.uniquefield
WHEN MATCHED THEN
UPDATE
SET t.id = t1.id,
t.field1 = t1.field1,
t.field2 = t1.field2
WHEN NOT MATCHED BY TARGET THEN
INSERT (id, uniquefield, field1, field2)
VALUES (t1.id, t1.uniquefield, t1.field1, t1.field2 );
您可以在此之后DROP #temp1
执行SELECT * FROM table1
检查更新/插入的数据。
答案 1 :(得分:2)
Temp tables
没有什么不同。不同之处在于它们仅适用于用户的当前连接;当用户与实例断开连接时,它们会自动删除。因此,您可以像处理任何其他SQL表一样处理这些表。
假设可以将uniquefield
列视为这些表之间的链接。
更新statemant:
update table1
set
t.id = t1.id,
t.field1 = t1.field1,
t.field2 = t1.field2
from table1 t
join #temp1 t1
on t.uniquefield = t1.uniquefield
插入声明:
insert into table1(id, uniquefield, field1, field2)
select t1.id, t1.uniquefield, t1.field1, t1.field2
from table1 t
join #temp1 t1
on t.uniquefield != t1.uniquefield
答案 2 :(得分:2)
假设2个表格行与id
相同,不插入exists()
-- Append missing row to table1
INSERT table1
SELECT * FROM #temp1 t WHERE NOT EXISTS(SELECT * FROM table1 WHERE id = t.id)
答案 3 :(得分:1)
这假设id
是表主键。否则适当更换。
UPDATE Table1
SET id= T.id,
Uniquefield = T.Uniquefield,
Field1 = T.field1,
Field2 = T.field2
FROM Table1
INNER JOIN #temp1 T ON T.id = Table1.id;
INSERT INTO Table1 (id, uniquefield, field1, field2)
SELECT id, uniquefield, field1, field2
FROM #temp1
WHERE id NOT IN (SELECT id FROM Table1)
答案 4 :(得分:1)
我认为优雅的方法是在这里使用MERGE:
SET IDENTITY_INSERT table1 ON;
MERGE INTO table1 AS T
USING #temp1 AS S
ON S.id = T.id
WHEN MATCHED THEN
UPDATE SET
T.uniquefield = S.uniquefield,
T.field1 = S.field1,
T.field2 = S.field2
WHEN NOT MATCHED BY TARGET THEN
INSERT (id, uniquefield, field1, field2)
VALUES (S.id, S.uniquefield, S.field1, S.field2);
SET IDENTITY_INSERT table1 OFF;
我已经添加了IDENTITY_INSERT,以防你的table1中的ID列是IDENTITY,你可能想要保留#temp1表中的那个。如果您不需要/拥有IDENTITY,请删除这些行。
答案 5 :(得分:1)
您可以简单地使用此查询: -
using System;
using System.Xml;
using SampleWebserviceApp.net.myasp.deepakgaur;
namespace SampleWebserviceApp
{
class Program
{
static void Main(string[] args)
{
InventoryWebservice Webservice = new InventoryWebservice();
var value = Webservice.GetDataByID("1");
XmlDocument doc = new XmlDocument();
doc.LoadXml(value);
string id = doc.GetElementsByTagName("Id").ToString();
Console.WriteLine(value);
Console.WriteLine(id);
Console.ReadKey();
}
}
}