2015-11-26 2 views
1

Я хочу, чтобы создать хранимую процедуру, где я хочу, чтобы проверить, если добавить Bin no и если в таблице есть он должен дать мне сообщений проверки в противном случае он должен работатьВыполнения проверки в хранимой процедуре, если данные уже существуют

Я попытался, как показано ниже, но это не работает

ALTER PROCEDURE [dbo].[sp_P_WMS_Stock_Adj_Val_Proc] 
    (@Bin_no nvarchar(max)) 
AS BEGIN 
    IF (@Bin_no =) 
    BEGIN 
      RAISERROR('Bin no already exist', 16, 1) 
      RETURN 
    END 
    ELSE 
    BEGIN 
     SELECT DISTINCT 
      Location_Name + '-' + convert(varchar, mkey) 
     FROM 
      WMS_Storage_Bin 
     WHERE 
      status = 'Confirmed' 
      AND location_name = @Bin_no 
    END 
END 

Я использую SQL Server 2005.

+0

использовать уникальное ограничение ...... а не триггер –

+0

@MitchWheat: можете ли вы предложить, как это использовать? так как я не знаком с этим. извините за это – BNN

+1

Я бы начал с ввода «уникального ограничения SQL Server». в поисковую систему ... –

ответ

2

Если вы действительно необходимо сделать это в хранимая процедура - использовать это:

ALTER PROCEDURE dbo.ValidateWMSStock 
    (@Bin_no nvarchar(max)) 
AS BEGIN 
    IF EXISTS (SELECT * FROM dbo.WMS_Storage_Bin 
       WHERE location_name = @Bin_no) 
    BEGIN 
      RAISERROR('Bin no already exist', 16, 1) 
      RETURN 
    END 
    ELSE 
    BEGIN 
     SELECT DISTINCT 
      Location_Name + '-' + convert(varchar, mkey) 
     FROM 
      WMS_Storage_Bin 
     WHERE 
      status = 'Confirmed' 
      AND location_name = @Bin_no 
    END 
END 

Но Митч Пшеница уже сказал - это, вероятно, гораздо проще просто поставить ограничение уникальности на этой колонке:

ALTER TABLE dbo.WMS_Storage_Bin 
    ADD CONSTRAINT UQ_Location_Name UNIQUE(location_name) 

После того, как уникальное ограничение на месте, если вы попытаетесь вставить строку с location_name, что уже существует, вы получите сообщение об ошибке

Msg 2627, Level 14, State 1, Line хх
Нарушение ограничения UNIQUE KEY 'UQ_Location_Name'. Невозможно вставить дубликат ключа в объект «dbo.WMS_Storage_Bin». Значение дублирующегося ключа (......).

Update:

Я попытался это - я считаю, что код я представил работу просто отлично:

DECLARE @BinTable TABLE (ID INT NOT NULL, Location_Name NVARCHAR(100)) 

INSERT INTO @BinTable VALUES(1, N'A1112'), (2, N'A1113'), (3, N'A1114'), (4, N'A1121') 

DECLARE @Bin_No NVARCHAR(MAX) 

-- SET @Bin_No = N'A1112' -- this prints "Bin already exists" as expected 
SET @Bin_No = N'A4112'  -- this prints "Bin does *NOT* exist" as expected 

IF EXISTS (SELECT * FROM @BinTable WHERE location_name = @Bin_no) 
    PRINT 'Bin already exists' 
ELSE 
    PRINT 'Bin does *NOT* exist' 
+0

У меня есть один бит, но он дает мне ошибку, поскольку «bin не существует» Я попробовал ** ЕСЛИ СУЩЕСТВУЕТ (SELECT * FROM dbo.WMS_Storage_Bin WHERE location_name <> @Bin_no) ** все еще не работает – BNN

+0

Что такое тип данных ' location_name' в вашей таблице? –

+0

Тип данных: «nvarchar» – BNN

Смежные вопросы