我有一个表,我在其中插入行为员工,但下一次当我想插入行我不想再次插入该员工的数据只是想要更新与必需的列,如果它退出那里,如果没有,然后创建新行
我们如何在sql Server 2005中执行此操作?
我正在使用jsp
我的查询是
String sql="insert into table1(id,name,itemname,itemcatName,itemQty)values('val1','val2','val3','val4','val5')";
如果它是第一次,然后将其插入到数据库else如果存在更新它
怎么做?
解决方法
尝试检查存在:
IF NOT EXISTS (SELECT * FROM dbo.Employee WHERE ID = @SomeID) INSERT INTO dbo.Employee(Col1,...,ColN) VALUES(Val1,..,ValN) ELSE UPDATE dbo.Employee SET Col1 = Val1,Col2 = Val2,....,ColN = ValN WHERE ID = @SomeID
您可以轻松地将其包装到存储过程中,并从外部调用该存储过程(例如,从C#编程语言或任何您正在使用的程序语言).
更新:您可以将这个整个语句写入一个长的字符串(可执行 – 但不是非常有用) – 或者可以将其包装到存储过程中:
CREATE PROCEDURE dbo.InsertOrUdpateEmployee @ID INT,@Name VARCHAR(50),@ItemName VARCHAR(50),@ItemCatName VARCHAR(50),@ItemQty DECIMAL(15,2) AS BEGIN IF NOT EXISTS (SELECT * FROM dbo.Table1 WHERE ID = @ID) INSERT INTO dbo.Table1(ID,Name,ItemName,ItemCatName,ItemQty) VALUES(@ID,@Name,@ItemName,@ItemCatName,@ItemQty) ELSE UPDATE dbo.Table1 SET Name = @Name,ItemName = @ItemName,ItemCatName = @ItemCatName,ItemQty = @ItemQty WHERE ID = @ID END