簡體   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