【发布时间】:2019-04-28 06:31:31
【问题描述】:
我正在存储过程中编写插入语句。当我为 SKU 插入重复值时,我没有得到 p>
尝试插入 ProductPrice 表时出错
和@errValue。
我不知道为什么?它只是说语句终止
ALTER PROCEDURE HW5INS1
-- PRODUCTPRICE TABLE: LEVEL-1
@SKU VARCHAR(64),
@startDate DATE,
@endDate DATE = NULL,---NOT REQUIRED
@price SMALLMONEY
AS
BEGIN TRANSACTION
-- Test For Existence Of Parent Row: LOOK INTO PRODUCTS TABLE
IF EXISTS (SELECT SKU FROM Products WHERE SKU = @SKU)
BEGIN
INSERT INTO ProductPrices (SKU, startDate, endDate, price)
VALUES (@SKU, @startDate, @endDate, @price)
SELECT * FROM ProductPrices
DECLARE @errValue INT
SET @errValue = @@ERROR
IF (@@ERROR <>0)
BEGIN
PRINT 'Error occurred while trying to insert the ProductPrice table'
PRINT @errValue
RETURN -11001
END
END
ELSE
BEGIN
-- PARENT DOES NOT EXIST, RETURN ERROR
PRINT 'Error: PARENT DOESNOT EXIST'
RETURN -11002
END
COMMIT TRANSACTION
RETURN
【问题讨论】:
-
该错误是自定义错误,实际上并没有告诉我们问题所在。发生的真正错误是什么?
-
尝试
IF @errValue <> 0而不是'IF (@@ERROR 0)'。 @@ERROR 在每个语句之后设置。 -
我希望查询返回在尝试插入 ProductPrice 表和 PRINT @errValue 时发生的错误,但它只是说重复的键值和语句终止而不打印任何内容。
-
附带说明,通常您会在
TRY...CATCH中使用类似的事务。您的COMMIT位于SP 的末尾,因此在发生错误时永远不会到达,但您没有ROLLBACK。这可能会给您带来一些问题。 -
@DanGuzman 仍然没有显示
标签: sql sql-server tsql stored-procedures