C#-将数据加载到SQL Server并合并(如果已经存在)
假设SQL Server中有下表:C#-将数据加载到SQL Server并合并(如果已经存在),c#,sql-server,merge,insert,insert-update,C#,Sql Server,Merge,Insert,Insert Update,假设SQL Server中有下表: MyTable: IDCol: Val1: Val2: 1 a b 2 c d ... 而且,我只能通过直接SQL语句访问/修改它(例如,这意味着我不能将文件放在某个位置并告诉它上载该文件) 因此,目前,在我的C#代码中,如果我想在这个表中插入值,我实际上在编写SQL,例如: INSERT INTO MyTable (IDCol, Col1, Col2) Values (.....
MyTable:
IDCol: Val1: Val2:
1 a b
2 c d
...
而且,我只能通过直接SQL语句访问/修改它(例如,这意味着我不能将文件放在某个位置并告诉它上载该文件)
因此,目前,在我的C#代码中,如果我想在这个表中插入值,我实际上在编写SQL,例如:
INSERT INTO MyTable (IDCol, Col1, Col2) Values (.....)
但现在我必须考虑表中已经存在值的可能性,如果存在,则更新该行
我知道我可以通过a来实现这一点,但如何通过直接SQL语句来实现呢
而且,如果#1是正确的方法,我如何做到这一点,如果我有两个程序实例在运行,我就不会以相同的名称重复创建临时表?您可以按照建议使用merge命令,或者使用if exists命令,如下所示:
IF EXISTS(SELECT * FROM myTable WHERE Id = @id)
UPDATE myTable SET x = @x WHERE Id = @id
ELSE
INSERT INTO myTable (Id, x) VALUES (@id, @x)
假设您正在基于ID列进行合并,并且假设您正在逐行触发insert,那么您有三个变量
@idcol、@col1、@col2
,然后使用下面的查询
--DECLARE @IDCol int
--DECLARE @Col1 varchar(10), @Col2 varchar(10)
--SET @IDcol=2
--SET @Col1='A'
--SET @col2='C'
IF NOT EXISTS( SELECT 1 FROM MyTable WHERE IDCol=@IDCol)
BEGIN
INSERT INTO MyTable (IDCol, Col1, Col2) Values (@IDcol,@col1,@col2)
END
ELSE
BEGIN
UPDATE MyTable
SET Col1= @Col1, Col2=@Col2
WHERE IDCol=@IDCol
END
--SELECT * from MyTable
如果您使用的是ADO.net而不是DataAdapters,请检查此链接,非常感谢@rashfmnb,但在这种情况下我不能,实际上,我必须像在Management studio中键入SQL一样编写SQL,并且无法将文件上载到DB可以看到的位置。在这种情况下,您必须检查数据是否存在,然后运行更新查询,否则运行插入查询