DinoOnCodeProject Ответов: 1

Как обеспечить правильные возвращаемые значения из хранимой процедуры.


Я создал таблицу под названием "имена" в SQL со следующими 2 столбцами

ID	AUTO ID
NAME	AS nVarchar(MAX)


У меня есть хранимая процедура, чтобы добавить в нее имя, если это имя еще не существует.

CREATE PROCEDURE [dbo].[Ins_NameNew] 
(
	@Name_Input	varChar(Max)
)
AS 
BEGIN
	DECLARE @NameExist INT
	DECLARE @NameID INT
	DECLARE @Action NVARCHAR(5)
	
	-- Check if the name exists
	SET @NameExist =
			CASE
				WHEN EXISTS (SELECT * FROM [dBName].[dbo].[Names] WHERE Name = @Name_Input )
				THEN 1
				ELSE 0
			END
	
	-- Proceed with Insert if doesn't exist
	IF @NameExist = 0

	BEGIN
			INSERT INTO [dBName].[dbo].[Names]
			(Name)
			VALUES
				(@Name_Input);
	END
	
	-- Get the ID whether Name existed already or just added	
	SET @NameID = (SELECT ID FROM [dBName].[dbo].[Names] WHERE Name = @Name_Input)
	
	
	SET @Action =
		CASE
			WHEN @NameExist = 0
			THEN 'Added'
			ELSE 'Exist'
		END

	SELECT @NameExist, @NameID, @Action
END


Это прекрасно работает, когда дело доходит до добавления нового имени. Но каждый раз он возвращает @NameExist как 1 и @Action как "Exist"

Любые предложения, где я ошибаюсь с сохраненным proc.

Что я уже пробовал:

CREATE PROCEDURE [dbo].[Ins_NameNew] 
(
	@Name_Input	varChar(Max)
)
AS 
BEGIN
	DECLARE @NameExist INT
	DECLARE @NameID INT
	DECLARE @Action NVARCHAR(5)
	
	-- Check if the name exists
	SET @NameExist =
			CASE
				WHEN EXISTS (SELECT * FROM [dBName].[dbo].[Names] WHERE Name = @Name_Input )
				THEN 1
				ELSE 0
			END
	
	-- Proceed with Insert if doesn't exist
	IF @NameExist = 0

	BEGIN
			INSERT INTO [dBName].[dbo].[Names]
			(Name)
			VALUES
				(@Name_Input);
	END
	
	-- Get the ID whether Name existed already or just added	
	SET @NameID = (SELECT ID FROM [dBName].[dbo].[Names] WHERE Name = @Name_Input)
	
	
	SET @Action =
		CASE
			WHEN @NameExist = 0
			THEN 'Added'
			ELSE 'Exist'
		END

	SELECT @NameExist, @NameID, @Action
END

DinoOnCodeProject

Пожалуйста, извините за грамматические ошибки типа " так как я очень новичок на этом сайте и медленно учусь размещать вопросы. Надеюсь, что этот вопрос не звучит слишком запутанно из-за этого. Я вижу, что он заменяет "с". В следующий раз буду осторожнее.
Заранее спасибо.

DinoOnCodeProject

Спасибо @PIEBALDconsult за то, что поправил меня. :)

Herman<T>.Instance

Подсказка: Вставки

1 Ответов

Рейтинг:
11

Lolo1986

Привет,

Похоже, что Ваш идентификатор-это столбец идентификаторов, вы можете легко просто изменить свой код, сделав что-то вроде этого.

CREATE PROCEDURE [dbo].[Ins_NameNew] 
(
	@Name_Input	varChar(Max)
)
AS 
BEGIN
	DECLARE @NameExist INT = 0
	DECLARE @NameID INT

	-- Proceed with Insert if doesn't exist
	IF EXISTS (SELECT * FROM [dBName].[dbo].[Names] WHERE Name = @Name_Input)
	BEGIN
			INSERT INTO [dBName].[dbo].[Names]
			(Name)
			VALUES
				(@Name_Input);
                       SET @NameID = @@IDENTITY;
	END
	ELSE
        BEGIN
                -- Get the ID whether Name existed already or just added, )
                -- remove top 1 if you Name is unique
	       SET @NameID = (SELECT TOP 1 ID FROM [dBName].[dbo].[Names] WHERE Name = @Name_Input)
                SET @NameExist = 1;
        END

 
	SELECT @NameExist, 
                      @NameID, 
                CASE
			WHEN @NameExist = 0
			THEN 'Added'
			ELSE 'Exist'
		END as 'Action'
END