[英]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.