在插入之前查明行是否存在的存储过程

Stored procedure to find out if row exists before insertion

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[SS_InsertApplicationStatus] 
    @CustomerID int,
    @EventType nvarchar,
    @EventDateTime datetime,
    @Comments nvarchar,
    @EmployeeID varchar,
    @ApplicationDate date
AS
BEGIN
    SET NOCOUNT ON;

    IF NOT EXIST(SELECT COUNT(*) FROM [dbo].[SS_CustomerCard] 
                 WHERE SS_ID = '@SS_ID')
    BEGIN
        INSERT INTO SS_ApplicationStatus (CustomerID, EventType, EventDateTime, Comments, EmployeeID, ApplicationDate)
        VALUES (@CustomerID, @EventType, @EventDateTime, @Comments, @EmployeeID, @ApplicationDate)
    END
END

行有错误IF NOT EXIST;我从 MySQL.

复制了这个

我想做的是

以下语句存在逻辑错误

IF NOT EXIST(SELECT COUNT(*) FROM [dbo].[SS_CustomerCard] WHERE SS_ID='@SS_ID')

您在查询中使用了聚合函数 COUNT(*),该函数总是 return 单行,其中数值 10 基于您的 WHERE 条件。

为什么要使用过程逻辑?使其完全基于设置。当然,您需要解释 @SS_ID 的来源,因为它不存在于您的代码片段中。

INSERT INTO SS_ApplicationStatus (CustomerID, EventType, EventDateTime, Comments, EmployeeID, ApplicationDate)
    SELECT @CustomerID, @EventType, @EventDateTime, @Comments, @EmployeeID, @ApplicationDate
    WHERE NOT EXISTS (SELECT 1 FROM [dbo].[SS_CustomerCard] WHERE SS_ID = @SS_ID);

SQL 服务器中的注释:

  • 关键字是 EXISTS 而不是 EXIST
  • 你没有引用参数,所以应该是@SS_ID而不是'@SS_ID'