繁体   English   中英

存储过程拒绝插入数据

[英]stored procedure refuses to insert data

我有下表:

ThisCategoryID int   IDENTITY, AUTO_INCREMENT
Title          text
Type           text
CategoryID     int   ALLOW NULLS
IsActive       bit
OrderIndex     int   ALLOW NULLS

与此数据:

ThisCategoryID  Title    Type          CategoryID  IsActive  OrderIndex
0               Lunch    Menu Section  NULL        True      3
2               Dessert  Menu Section  NULL        True      1
3               Banh Mi  Food Item     0           True      4

和以下存储过程:

ALTER PROCEDURE [dbo].[sp_new_category]
    @Title text,
    @Type text,
    @CategoryID int = null,
    @IsActive bit, 
    @OrderIndex int = null
AS
    DECLARE @Identity int
    IF (SELECT count(*) FROM Category WHERE difference(title, @title) = 4) > 0
    BEGIN
        INSERT INTO Category (Title, Type, CategoryID, IsActive, OrderIndex) VALUES (@Title, @Type, @CategoryID, @IsActive, @OrderIndex)
        SET @Identity = scope_identity()
    END
    ELSE
    BEGIN
        SET @Identity = -1
    END
    SELECT @Identity AS ID
    RETURN @Identity

表中没有标题为“ Snack”的项目,但是每次我使用以下参数运行sp_new_category时,其收益都为-1:

 @Title: Snack
 @Type: Menu Section
 @CategoryID: NULL
 @IsActive: True
 @OrderIndex: NULL

有人可以向我解释为什么吗?

我相信您的意图是要满足以下条件,即检查是否有人试图按标题(与SOUNDEX匹配)输入已经存在的项目:

IF (SELECT count(*) FROM Category WHERE difference(title, @title) = 4) > 0

但是,条件语句的编写方式只有在它们相似时才添加。 尝试以下方法:

DECLARE @Identity int
IF (SELECT count(*) FROM Category WHERE difference(title, @title) = 4) > 0
BEGIN
    SET @Identity = -1
END
ELSE
BEGIN
    INSERT INTO Category (Title, Type, CategoryID, IsActive, OrderIndex) VALUES (@Title, @Type, @CategoryID, @IsActive, @OrderIndex)
    SET @Identity = scope_identity()
END
SELECT @Identity AS ID
RETURN @Identity
SELECT difference('Snack', 'Lunch')
UNION SELECT difference('Snack', 'Dessert')
UNION SELECT difference('Snack', 'Banh Mi')

3
1
2

您的差异都不等于4,因此您的插入内容永远不会运行,因此@identity始终为-1

difference是文本的SOUNDEX编码的差异,这是英文名称的古旧哈希。 它不适用于外来词。 如果您告诉我们您通过使用它所取得的成就,我们可能会为您提供帮助。

我想念什么吗?

IF语句为假,因此他去了ELSE并将SET @Identity = -1 因此它将return -1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM