是否有任何可能的方法来执行非查询而不必将其分配给LINQ to SQL类?
我们说我有这个程序,只有当INSERT
(UNIQUE CONSTRAINT)不存在时才想Town_Name
。否则,执行UPDATE
。此过程运行良好,并通过SQL Server执行该作业。但是,我无法通过C#代码执行它。
我试图避免使用SQL客户端,作为课程的一部分,我的小应用程序必须能够使用LINQ选择,插入/更新和删除数据。
我采取的方法总是导致0行受影响。
// Call Procedure.
db.P_SaveClient("000000001M", "Test", "Dummy", null, "+35699999999");
-- Procedure to be executed.
CREATE PROCEDURE Appointment.SaveClient
(
@id NVARCHAR(10),
@firstName NVARCHAR(35),
@lastName NVARCHAR(35),
@tel NVARCHAR(12),
@mob NVARCHAR(12)
)
AS
BEGIN
DECLARE @clientCount TINYINT
SELECT @clientCount = COUNT(Client_ID)
FROM Appointment.Client
WHERE Client_ID = @id
IF @clientCount = 0
BEGIN
INSERT INTO Appointment.Client
VALUES (
@id
, @firstName
, @lastName
, @tel
, @mob
)
END
ELSE
BEGIN
UPDATE Appointment.Client
SET Client_ID = @id
, First_Name = @firstName
, Last_Name = @lastName
, Telephone = @tel
, Mobile = @mob
END
END
我发现了一些教程:
答案 0 :(得分:1)
您正在寻找在SQL中执行的Merge语句,您可以通过存储过程调用它。这将允许您根据是否找到它来插入或更新。它甚至可以返回插入的记录的ID,这可以为您节省另一个查询。
Merge Town t
using ( select @Town_Name as 'Town_Name')
src on (src.Town_Name = t.Town_Name )
when NOT MATCHED then
insert (Town_Name) values (src.Town_Name)
output INSERTED.Town_ID
请参阅此处了解语法和更多示例: https://msdn.microsoft.com/en-us/library/bb510625.aspx