我需要支持,我有一個程序,當我試圖在ProductName列中添加相同的名稱時,我需要它回傳一個錯誤:
USE [Northwind] 。
GO
/****** Object: 存盤程式[dbo].[AddNewProduct]腳本日期:14.09.2021 18:15:53 ******/
SET ANSI_NULLS ON
啟用
SET QUOTED_IDENTIFIER ON
啟用
ALTER procedure [dbo].[AddNewProduct].
@ProductName nvarchar(40), @SupplierID int。@CategoryID int, @QuantityPerUnit nvarchar(20)。@UnitPrice金錢,@UnitsInStock smallint。@UnitsOnOrder smallint, @ReorderLevel smallint, @Discontinued bit
as
如果@ProductName = @ProductName
Begin
宣告 @count int, @ProductID int
插入 進入 產品
(
產品名稱。
供應商ID ,
CategoryID ,
QuantityPerUnit,
單位價格。
庫存單位。
訂單上的單位。
重訂水平。
停產)
價值@ProductName,
@SupplierID ,
@CategoryID 。
@QuantityPerUnit。
@UnitPrice,
@UnitsInStock,
@UnitsOnOrder,
@ReorderLevel,
@Discontinued )
結束。
else[/span
Begin Begin
DECLARE @ErrorMessage NVARCHAR(4000)。
SET @ErrorMessage = 'DDD'。
RAISERROR(@ErrorMessage, 16, 1)。
結束。
當我試圖添加相同的記錄時,我希望出現一條資訊 你能告訴我,我做錯了什么,或者需要添加/改變什么嗎?
uj5u.com熱心網友回復:
正如評論中提到的,這個邏輯沒有權利出現在程序中,它應該是表的定義的一部分,作為一個UNIQUE CONSTRAINT或UNIQUE INDEX。我將在這里使用UNIQUE CONSTRAINT,這意味著CONSTRAINT的DDL將是這樣的:
ALTER TABLE dbo. 產品 添加 STRAINT UQ_ProductName UNIQUE (ProductName)。
然后,你只需要你的存盤程序看起來像這樣:
ALTER PROCEDURE [dbo]. [AddNewProduct] @ProductName nvarchar(40) 。
@SupplierID int,
@CategoryID int,
@QuantityPerUnit nvarchar(20), --如果是數量,為什么是nvarchar呢?
@UnitPrice錢。
@UnitsInStock smallint。
@UnitsOnOrder smallint。
@ReorderLevel smallint,
@Discontinued bit AS.
BEGIN
INSERT INTO dbo.Products(ProductName,
供應商ID。
CategoryID,
QuantityPerUnit,
單位價格。
庫存單位。
訂單上的單位。
重訂水平。
已停產)
VALUES (@ProductName, @SupplierID, @CategoryID, @QuantityPerUnit, @UnitPrice, @UnitsInStock, @UnitsOnOrder, @ReorderLevel, @Discontinued)。)
END。
歸
如果你試圖插入一個重復的值,你會得到以下錯誤:
如果你試圖插入一個重復的值,你會得到以下錯誤。
違反了UNIQUE KEY約束'UQ_ProductName'。不能在物件'dbo.Products'中插入重復的鍵。重復鍵的值是({重復的產品名稱})。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/307274.html
標籤:
