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