Sql server 向存储过程添加IF…ELSE语句以跳过重复的主键
在我的物理C#代码中有一个try-catch,当出现错误时,它会跳过这个插入过程,并继续循环以填充数据库。然而,这是一种糟糕的编码实践 因此,我想在下面的存储过程中添加一个Sql server 向存储过程添加IF…ELSE语句以跳过重复的主键,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,在我的物理C#代码中有一个try-catch,当出现错误时,它会跳过这个插入过程,并继续循环以填充数据库。然而,这是一种糟糕的编码实践 因此,我想在下面的存储过程中添加一个IF语句,如果主键已经存在,该语句将跳过。我的主键是@id 我该怎么办 CREATE PROCEDURE InsertProc ( @id int, @to nvarchar(100), @from nvarchar(100), @subject nvarchar(100),
IF
语句,如果主键已经存在,该语句将跳过。我的主键是@id
我该怎么办
CREATE PROCEDURE InsertProc
(
@id int,
@to nvarchar(100),
@from nvarchar(100),
@subject nvarchar(100),
@date datetime
)
AS
INSERT INTO Emails_Log (Email_ID, e_To, e_From, e_Subject, e_Date)
VALUES (@id, @to, @from, @subject, @date)
如果确实要更新记录(如果已存在)并插入(如果不存在),则模式如下:
CREATE PROCEDURE InsertProc
(
@id int,
@to nvarchar(100),
@from nvarchar(100),
@subject nvarchar(100),
@date datetime
)
AS
UPDATE Emails_Log
SET e_To = @to,
e_From = @from,
e_Subject = @subject,
e_Date = @date
WHERE Email_ID = @ID
-- If there was no update it means that @ID does not exist,
-- So we proceede with insert
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO Emails_Log (Email_ID, e_To, e_From, e_Subject, e_Date)
VALUES (@id, @to, @from, @subject, @date)
END
另一种方法是使用命令
看看。试试这个代码
CREATE PROCEDURE InsertProc
(
@id int,
@to nvarchar(100),
@from nvarchar(100),
@subject nvarchar(100),
@date datetime
)
AS
IF NOT EXISTS (SELECT Email_ID From Emails_Log Where Email_ID = @id)
BEGIN
INSERT INTO Emails_Log (Email_ID, e_To, e_From, e_Subject, e_Date)
VALUES (@id, @to, @from, @subject, @date)
END
您可以检查表和中是否存在记录 在一条语句中插入记录
设置。。。?((at)id,(at)to,(at)from,(at)subject,(at)date)会进入那里吗?((at)subject,(at)date)会进入那里吗?Msg 102,15级,State 31,Procedure InsertUpdateProc,第11行“(”附近的语法不正确:我得到了这个错误
CREATE PROCEDURE InsertProc
(
@id int,
@to nvarchar(100),
@from nvarchar(100),
@subject nvarchar(100),
@date datetime
)
AS
IF EXISTS(SELECT * From Emails_Log Where Email_ID = @id)
UPDATE Emails_Log (Email_ID, e_To, e_From, e_Subject, e_Date)
SET e_To = @to, e_From = @from, e_Subject = @subject, e_Date = @date
WHERE Email_ID = @id
ELSE
INSERT INTO Emails_Log (Email_ID, e_To, e_From, e_Subject, e_Date)
VALUES (@id, @to, @from, @subject, @date)
CREATE PROCEDURE InsertProc
(
@id int,
@to nvarchar(100),
@from nvarchar(100),
@subject nvarchar(100),
@date datetime
)
AS
IF NOT EXISTS (SELECT Email_ID From Emails_Log Where Email_ID = @id)
BEGIN
INSERT INTO Emails_Log (Email_ID, e_To, e_From, e_Subject, e_Date)
VALUES (@id, @to, @from, @subject, @date)
END